2012-07-24 4 views
8
<select data-myattr="123" id="cboTest" 
     onchange="SayHello(this.data-myattr)"> 

Dies funktioniert nicht. Wenn ich die data- davon nehme, funktioniert es, aber von dem, was ich gelesen habe, ist es HTML5 sicher, es so zu machen. Auf diese Weise erhalte ich jedoch: "Microsoft JScript-Laufzeitfehler: 'myattr' ist nicht definiert".Wie übergebe ich ein benutzerdefiniertes Attribut an eine Funktion?

Das ist meine super-komplexe Funktion:

function SayHello(msg) { 
    alert(msg); 
} 

Vielen Dank im Voraus.

+4

'this.dataset.myattr' (funktioniert nicht in [" beschissenen "Browsern) (http://caniuse.com/dataset)) –

+1

Sie meinte wahrscheinlich * Legacy-Browser *. –

+2

@ FrédéricHamidi Ja, das wäre der passende Ausdruck ':)' –

Antwort

9

Versuchen wie folgt aus:

<select data-myattr="123" id="cboTest" 
     onchange="SayHello(this.getAttribute('data-myattr'))"> 
+0

perfekte Antwort !!! +1 :) – SagarPPanchal

1

Der Ausdruck:

onchange="SayHello(this.data-myattr)">

interpretted als this.dataminusmyattr wird. Sie müssten verwenden:

onchange="SayHello(this.getAttribute('data-myattr'))" 

statt.

+1

Das [funktioniert nicht] (http://jsfiddle.net/TPZsT/) –

+0

@ ŠimeVidas Es hat für mich in IE9. – Yatrix

+0

Sorry, ich denke, DOM-Knoten implementieren keine Indexer. Verwenden Sie stattdessen "getAttribute()". –

1

So etwas wie getAttribute() sollte

Here's an example tun:

<select data-myattr="123" id="cboTest" 
onchange="SayHello(this.getAttribute('data-myattr'))"> 
    <option>1</option> 
    <option>2</option> 
</select> 

Auch ich würde versuchen, die Verwendung von Inline-Scripts zu vermeiden, da sie HTML chaotisch. Verwenden Sie stattdessen addEventListener/attachEvent (älterer IE).

+1

Warum denken Sie, dass hasAttribute notwendig war? – Bergi

+0

@Bergi guter Punkt. – Joseph

+0

@JosephtheDreamer Ich erstelle die Steuerelemente dynamisch in einem Benutzersteuerelement, sodass niemand das HTML sehen wird, wenn sie es nicht im Browser anzeigen. Wie würde ich Add/Attach verwenden, wenn ich Steuerelemente dynamisch in C# code-behind erstellen? Ich habe sie nie benutzt. – Yatrix