2012-07-24 5 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éricHamidi Yea, 그 적절한 용어':)' –

답변

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'))" 

대신에 사용해야합니다.

Here's an example을해야 getAttribute() 같은

+1

그건 [작동하지 않습니다] (http://jsfiddle.net/TPZsT/) –

+0

@ imeVidas 그것은 IE9에서 나를 위해 않았다. – Yatrix

+0

죄송합니다, DOM 노드가 인덱서를 구현하지 않는다고 생각합니다. 대신에,'getAttribute()'를 사용해주세요. –

1

뭔가 :

<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# 코드 숨김으로 컨트롤을 동적으로 만들 때 어떻게 추가/연결을 사용합니까? 나는 그들을 사용한 적이 없다. – Yatrix

관련 문제