2011-05-06 4 views
0

JavaScript를 사용하여 선택 상자의 값을 가져 오려고합니다. Firefox, Chrome 및 IE9에서는 작동하지만 IE6,7,8에서는 작동하지 않습니다. jQuery의 val()을 사용하면 작동하지만 바닐라 자바 ​​스크립트를 사용하여 값을 얻으려고합니다. 왜 이것이 효과가 없습니까? ' 난 그냥 일부 이전 코드에서이했다자바 스크립트를 사용하여 IE에서 선택 상자 값을 가져올 수 없습니다.

var select_data ={index:0, value:""}; 
select_data.index = sel_node.selectedIndex; 
select_data.value = sel_node.options[select_data.index].value; 

$('#get').click(function() { 
    var x = document.getElementById('bbb').value;//works if i do $('#bbb').val() 
    alert(x) 
}) 

확인 http://jsfiddle.net/s7YAN/25/

+1

jQuery가 존재하는 이유는 이러한 유형의 브라우저 간 비 호환 성을 원활하게하기 위해서입니다. 만약 IE6를 지원하고 싶다면, 그것을 사용해 보시기 바랍니다. – Domenic

+0

@Domenic 제가 이해합니다.이 질문의 목적은 일반 자바 스크립트를 사용하여 IE에서 어떻게 수행 할 수 있습니까? – Pinkie

답변

6

Looking at the jQuery source code, 당신은 .val()을 위해, 그들은 얻을 것을 알 수 값 <select />을 선택하여 <option /> 요소의 값을 가져옵니다.

function(elem) { 
    // attributes.value is undefined in Blackberry 4.7 but 
    // uses .value. See #6932 
    var val = elem.attributes.value; 
    return !val || val.specified ? elem.value : elem.text; 
} 

그래서 키가 value 하나가 truthy없는 경우가 옵션 요소의 text 속성을 얻을 수 있습니다 : 다음과 같이 <option /> 가치 게터에 대한 코드입니다. 이는 귀하의 예에서 <option /> 요소에 value 속성이이 아니기 때문에 중요합니다. 따라서 선택 사항이

<option value="xyz">xyz</option> 
<option value="abcdx">abcdx</option> 

인 경우 작동합니다. value 속성이 없어도 다른 브라우저에서도 작동합니다. the spec says that the valueproperty should default to the same as the textContent property입니다. 그러나 IE는 버전 9까지 사양의 측면을 구현하지 않았으며 value속성value에서 채웠습니다. 예상처럼

당신의 코드가 작동하려면 마크 업을 변경하지 않고, 당신은 my revised version of your jsFiddle에로 수행해야합니다

$('#get').click(function() { 
    var bbbEl = document.getElementById('bbb'); 
    var selectedOptionEl = bbbEl.options[bbbEl.selectedIndex]; 
    var x = selectedOptionEl.value || selectedOptionEl.text; 
    alert(x); 
}); 

(스펙 말한다처럼, 당신은 textContent를 사용하지 않도록주의 IE6 때문에 적어도 textContent을 전혀 구현하지 않았으므로, 단지 text입니다. 차이점에 의존하면 text이 "textContent과 같지만 공백이 축소된다는 점만 제외하면 불일치가있을 수 있습니다.")

+0

이것은 의미가 있습니다. 감사. – Pinkie

+0

IE에서 실패한 이유는 IE가 [W3C HTML 4.01 사양] (http://www.w3.org/TR/html401/interact/forms.html#adef-value-OPTION)을 따르지 않기 때문입니다. 옵션에 값 속성이없는 경우 값은 옵션의 내용입니다. – RobG

0

(당신이 sel_node로에서 getElementById의 결과를 넣어 그 아래의 코드를 가정), 다음을 시도하십시오 내 때 FF 나 IE6에서 일해야만한다고 썼다. 이 다소 복잡한 방식이 IE6에서 작동하는 데 있다고 가정합니다. 당신은 아마 이것을 단순화 할 수 있습니다, 내 코드에서 select_data 객체를 반환하고 싶었습니다. 나는 그것을 재 작성하기보다는 오히려 잘 알려진 작업 버전을 잘라내어 붙여 넣을 것이라고 생각했다.

var select_node = document.getElementById('bbb'); 
var the_value = select_node.options[select_node.selectedIndex].value; 

지금 the_value 당신이 원하는 것을 가지고 (더 나은 형식 여기 코멘트를 위로 이동). 내 대답은 다른 대답과 동일합니다 (게시했을 때나 내가 귀찮게하지 않았을 때). 내가 게시 한 코드는 내가 사용한 코드이며 IE6에서 작동 한 코드입니다. 문제가 해결되지 않으면, 디버거를 통해 단계로 우리가 당신이 옵션 [select_node.selectedindex]를 참조 알려

+0

이것은 내 jsfiddle에 어떻게 적용됩니까? – Pinkie

0

시도 :

var list = document.getElementById('bbb'); 
var x = list.options[list.selectedIndex].value; 
+0

이것은 작동하지 않습니다. http://jsfiddle.net/s7YAN/26/ IE6에서 테스트하고 있습니다. – Pinkie

관련 문제