2012-05-26 2 views
2

에 대한 jQuery를 선택에 나는 같은 onchange를 이벤트를 지정하려면이 선택 필드의 무리 ..와일드 카드 다차원 선택 필드

<select name="options[0][option_group_id]" /> 
<select name="options[1][option_group_id]" /> 
<select name="options[2][option_group_id]" /> 
<select name="options[new3][option_group_id]" /> 

이있는 \ (S)가 키 0.1에 대한 와일드 카드입니다 다음 , 2, new3 ... :

<script> 
$("select[name^='options[\\S*][option_group_id]']").live("change", function(){ 
    alert('Houston we have contact!'); 
}); 
</script> 

하지만 작동하지 않습니다. 작동하게하려면 무엇을 넣어야합니까?

+0

당신이 그들 모두를 선택 하시겠습니까? 왜 단지'$ ('select')'가 아닌가? – bfavaretto

+0

아니요, 개별적으로 식별하여 키 식별자와 관련된 연쇄 작업을 수행하고 싶습니다. 다른 경우입니다. – tim

+1

덧붙여서 :'live' [감가 상각되며 jQuery에서 삭제됩니다] (http://api.jquery.com/live/). [대신에'on()'을 사용해야합니다 (http://api.jquery.com/on/). – vzwick

답변

3

그냥 2 개 표현으로 분할 : 그 결말의 이름의 시작 부분에 하나, 그리고 또 다른 :

$('select[name^="options"][name$="[option_group_id]"]') 

http://jsfiddle.net/zerkms/enZLu/

+0

당신은이 표정을 매우 놀라 울 정도로 쉽게 만들었습니다! 그것은 매력처럼 작동합니다. 나는 당신이 그런 식을 결합 할 수 있다는 것을 몰랐습니다. – tim

+0

@tim : 예, 원하는대로 표현을 결합 할 수 있습니다. '[name^= "options"]'는 단지'select'와 전혀 다른 점이 없습니다 – zerkms

2
var pattern = /options\[\d{1,}\]\[option_group_id\]/; 
$('select').filter(function(){ 
    return $(this).attr('name').match(pattern) !== null; 
}).live(... 
+0

와일드 카드를 해결하기위한 훌륭한 답을 얻기 위해 Upvoted. zerkms의 대답은 질문의이 특정 예에 대해 가장 편리합니다. 고맙습니다. – tim

+0

감사합니다. 응용 프로그램의 성능 민감도에 따라 [this jsPerf benchmark.] (http://jsperf.com/filter-vs-multiple-expressions)도 고려할 수 있습니다. @zerkms 버전은 훨씬 더 읽기 쉽고 jQuery와 비슷합니다. – vzwick

+0

크롬을 사용하면 솔루션이 다중 표현식보다 20 % 빠릅니다. – tim