2010-12-15 10 views
3

Ich habe eine Schaltfläche Tag als angenommen und Eingabe-Tag, die einen anderen Text hat, was ich tun, was es tun soll, siehe unten.IE liest nicht den echten Knopfwert! Wie komme ich dazu?

<button value="<%=RS("field1")%>" name="change" id="change">Change</button> 

Dies funktioniert Dandy in Firefox, aber im IE .. dun dun, dunnnn ... der Wert der Taste kommt zurück, wie das Wort "change", die der Text sein, die Taste zeigt gemeint ist.

würde ich in der Regel nur Tag verwenden und geben aber ich denke, ich nur einen Tag button

Gibt es trotzdem das umgehen können?

Antwort

6

Von w3schools.com:

Wichtig: Wenn Sie die Taste Element in einem HTML-Formular verwenden, unterschiedliche Browser unterschiedliche Werte vorlegen wird. Internet Explorer sendet den Text zwischen den Tags <button> und </button> , während andere Browser den Inhalt des Attributs Wert übermitteln. Verwenden Sie das Eingabeelement, um Schaltflächen in einem HTML-Formular zu erstellen.

Daher Was Sie tun sollten, ist <input type="button" />

+0

Es sei denn, er möchte HTML zur Schaltfläche hinzufügen, was mit '' nicht möglich ist. –

+0

Ich glaube nicht, dass die 'Eingabe' Tag können Sie einen anderen Wert als der eigentliche Text, das war mein Problem – Hayley

+0

Dank Andy und Hayley. Ja, das Eingabe-Tag erlaubt KEINE unterschiedlichen Schaltflächen und Werte. Das Problem ist, dass Sie dies nicht in HTML tun können und IE gleichzeitig unterstützen. Zeitraum. Sie können ein javascript onclick-Ereignis hinzufügen, um den Wert vor der Übergabe zu ändern, oder einen der anderen Vorschläge in den Antworten hier verwenden. Eine HTML-Lösung, die einen anderen Text und Wert für eine Schaltfläche hat, unterstützt IE nicht. – Faisal

2

Soweit ich weiß, gibt es keinen Weg drum herum. Es ist einfach die Art und Weise, wie IE das Button-Tag behandelt, es wird den Text zwischen dem öffnenden und schließenden Tag senden.

In Anbetracht der Tatsache, dass Sie kein normales Eingabe-Tag für die Schaltfläche verwenden können, wie wäre es mit einem versteckten Feld, um die Methode zu vermitteln, die Sie verwenden möchten?

<form action="somepage" method="POST"> 
    <!-- some fields here --> 
    <input type="hidden" name="action" value="<%=RS("field1")%>" /> 
    <button name="change" id="change">Change</button> 
</form> 
+0

Ich habe ein verstecktes Feld inplace, aber die Schaltfläche ist in einer Schleife, so dass jede Schaltfläche den Wert von 'rs ("field") hat, fand ich mit dem hiddenfield die Ausgabe wäre "firstloopvalue, secondloopvalue" etc .. – Hayley

+0

Nun, das Problem ist mit dem Button-Element, es ist einfach ein bekanntes Problem, dass es anders gehandhabt wird. Warum können Sie also keine Eingabe verwenden? –

+0

nutzlos, wenn ich zwei oder mehr Schaltflächen in der Form habe. Wie erkennt man, welche Taste gedrückt wird? OK. Verschiedene Tasten sollten unterschiedliche Namen haben. dann sollten wir den gedrückten Knopf testen, der Name existiert nur in der Form, anstatt seinen Wert zu überprüfen. – Znik

3

Was ich in der Regel in Situationen wie diese getan habe, ist die Information in dem name Attribute einbetten, so dass Sie

<button name="change:<%=RS("field1")%>" id="change:<%=RS("field1")%>">Change</button> 

dann mit dem serverseitigen Code haben würden den zurückgegebenen Wert verwerfen und zerlege den Namen dann wieder in ein {Name, Wert) -Paar.

(Beachten Sie, dass Ihre „id“ Bedürfnis ohnehin einzigartig sein.)

0

IE8 den Wert sendet, so ist es nur IE7 (wahrscheinlich zu 6 aber wen interessiert) Problem.

Wie auch immer, ein möglicher Trick ist, den Wert als Teil des Textes, versteckt, dann in der Schaltfläche klicken Ereignis (mit JavaScript) ändern Sie die Schaltfläche Text auf diesen Wert.

Das Endergebnis würde wie folgt aussehen:

<button value="<%=RS("field1")%>" name="change" onclick="this.innerHTML = this.childNodes[1].innerHTML;"><span>Change</span><span style="display: none;"><%=RS("field1")%></span></button> 

Auch, wie Sie diese in Schleife haben, setzen Sie nicht die ID zu vermeiden, mehr als ein Element mit der gleichen ID teilen - es ist ungültig, und wenn Sie benötigen die ID aus irgendeinem Grund, fügen Sie bei jeder Iteration etwas Einzigartiges hinzu.

+1

Das IE8-Verhalten hängt vom Dokumentkompatibilitätsmodus ab. – mrec

+0

@mrec yep, wusste nicht, dass zurück, wenn Sie diese Antwort schreiben. Lassen Sie IE8 nicht mehr auf diese Dinge testen. Wenn Sie also die Antwort verbessern möchten, indem Sie konkretere Details angeben, gehen Sie vor und tun Sie dies, indem Sie auf diesen Kommentar zeigen, damit die Änderung genehmigt wird. –

1

Scheint mir der gewünschte Wert immer in der Schaltfläche „Wert“ Attribute ist (da der Wert ist der andere Browser einreichen), also warum nicht einfach:

<button ... onclick="this.innerHTML=this.value;" ... > 
0

Wie ich oben beschrieben, nicht Überprüfen Sie den Wert im Paar {button_name, button_value}. Überprüfen Sie stattdessen, ob nur button_name in der Eingabegruppe vorhanden ist, ohne dessen Wert zu überprüfen.

Verwandte Themen