Name der Einstellung der DOM-created-element schlägt in der IE — workaround?
Bekam ich etwas schwer von dieser heute:
function mk_input( name, val ) {
var inp = document.createElement( 'input' );
inp.name = name;
inp.value = val;
inp.type = 'hidden';
return inp;
}
Als es stellt sich heraus, Einstellung der name
der ein element erstellt, über createElement
funktioniert nicht im IE. Es muss nicht zu einem Fehler oder irgendetwas, nur im hintergrund fehlschlägt, verursacht ein zu überlegen, warum Ihre verborgenen Felder sind nicht immer ordnungsgemäß gefüllt.
Soweit ich das beurteilen kann, gibt es keine Problemumgehung. Sie haben nur Biss die Kugel und das erstellen der <input>
tag durch string-manipulation und kleben Sie es in mit .innerHTML
statt.
Gibt es eine bessere Möglichkeit? Vielleicht mit so etwas wie jQuery? Ich habe eine oberflächliche Suche und habe nichts gefunden, genau akin to createElement
in JQuery, aber vielleicht habe ich etwas verpasst.
- Funktioniert es, wenn Sie den Namen gesetzt, sobald die Knoten in der DOM ?
- Nein, das funktioniert auch nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur zu re-iterieren das problem: im IE, programmgesteuert festlegen der
name
- Attribut auf ein element erstellt, überdocument.createElement('input')
ist, spiegelt sich nicht in dengetElementsByName
,form.elements
(wenn das Anhängen eines Formulars), und nicht zusammen mit denform
(wieder, wenn das Anhängen eines Formulars) [Referenz].Hier ist der workaround habe ich in der Vergangenheit verwendet (angepasst auf deine Frage von hier aus):
Dies ist ähnlich zu feature-Erkennung (im Gegensatz zur browser-Erkennung). Die ersten
createElement
gelingen wird, DH, während die letzteren wird es gelingen, die in den standards-compliant Browser.Und natürlich die jQuery-äquivalent, da Sie tagged die Frage als solche:
(wie nebenbei, unter der Haube jQuery ist zu tun, was Sie in Ihrer Frage beschreiben: es wird eine dummy -
<div>
und setzt seineninnerHTML
zu den<input type="...
Zeichenfolge übergeben, oben).Als @jeffamaphone Punkte aus, dieser bug wurde in IE8.
Sie fixiert diese im IE8. In früheren Versionen, müssen Sie den Namen, wenn Sie anrufen, createElement. Von MSDN:
Hier ist das Beispiel von MSDN: