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

これは機能しません。私がdata-をそれから取り除くと、それは動作しますが、私が読んだことから、それはhtml5そのようにするのが安全です。しかし、そのようにして、私は得る:"Microsoft JScriptランタイムエラー: 'myattr'は未定義です"。事前にカスタム属性を関数に渡すにはどうすればよいですか?

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

ありがとう:

は、これは私の超複雑な関数です。

+4

'this.dataset.myattr'([shitty]ブラウザ(http://caniuse.com/dataset)では動作しません) –

+1

おそらく、*従来のブラウザ*を意味していました。 –

+2

@FrédéricHamidiYea、それは適切な言葉になります ':)' –

答えて

9

このようにしてみてください。

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

完璧な答え! +1 :) – SagarPPanchal

1

の式:

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

this.dataマイナスmyattrように解釈されています。代わりに:

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

を使用する必要があります。 getAttribute()よう

+1

それは[動作しません](http://jsfiddle.net/TPZsT/) –

+0

@ imeVidas IE9で私のためにしました。 – Yatrix

+0

申し訳ありませんが、DOMノードはインデクサーを実装していないと思います。代わりに 'getAttribute()'を使ってみてください。 –

1

何かが

Here's an example行う必要があります。また

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

を、私は彼らがHTMLを乱雑にするため、インラインスクリプトの使用を回避しようと思います。代わりにaddEventListener/attachEvent(古いIE)を使用してください。

+1

なぜhasAttributeが必要だと思いますか? – Bergi

+0

@Bergi良い点。 – Joseph

+0

@JosephtheDreamer私はユーザーコントロールでコントロールを動的に作成しているので、ブラウザーで表示しない限り誰もHTMLを見ません。 C#コードビハインドでコントロールを動的に作成するときに、どのようにadd/attachを使用すればいいですか?私はそれらを使ったことはありません。 – Yatrix

関連する問題