2013-03-23 8 views
16

के साथ चयनित विकल्प प्राप्त करना मुझे आश्चर्य है कि जावास्क्रिप्ट में <select multiple> फ़ील्ड में वर्तमान में चयनित विकल्पों को प्राप्त करने के लिए सभी विकल्पों पर "बेवकूफ" पुनरावृत्ति के बजाय सेल्टर एपीआई का उपयोग करना संभव है।querySelectorAll

select.querySelectorAll('option[selected="selected"]') केवल उन विकल्पों को लौटाता है जिन्हें मूल HTML में पूर्व निर्धारित के रूप में चिह्नित किया गया था, जो मैं नहीं ढूंढ रहा हूं। कोई विचार?

+0

मुझे लगता है कि अपने ही एकमात्र विकल्प भर में 'option' तत्वों पुनरावृति करने के लिए है और उन लोगों को फ़िल्टर करें जिन्हें चयनित नहीं किया गया है। –

उत्तर

38

document.querySelectorAll('option:checked')

IE9 पर भी काम करता है;)

+0

[9.0 के साथ काम करना चाहिए] (https://developer.mozilla.org/en-US/docs/CSS/:checked), नीचे – zeroflagL

+0

पर ब्राउज़र संगतता यदि jQuery एक विकल्प है तो आप 'चयनित 'का उपयोग कर सकते हैं चयनकर्ता – zeroflagL

+0

बहुत बुरा है, लेकिन जानना अच्छा है। – zeroflagL

1

मुझे आपकी समस्या का भी अनुभव हुआ, मुझे लगता है कि जावास्क्रिप्ट के साथ ऐसा करना है जो डोम में बदलावों को पहचान नहीं रहा है।

यहाँ एक समाधान है:

jsFiddle

document.getElementById('test').onclick = function() { 
    var select = document.getElementById('select'); 
    var options = getSelectedOptions(select); 
    console.log(options); 
}; 

function getSelectedOptions(select) { 
    var result = []; 
    var options = select.getElementsByTagName('option'); 
    for (var i = 0; i < options.length; i++) { 
     if (options[i].selected) 
      result.push(options[i]); 
    }; 
    return result; 
} 
+0

धन्यवाद, यह मूल रूप से मैं पहले से ही कर रहा हूं। –

+0

जेएस इन परिवर्तनों को डीओएम में पहचानता है। समस्या यह है कि 'चयनित' डोम संपत्ति गैर-क्रमिक है। 'चयनित' विशेषता 'डिफ़ॉल्ट चयन' DOM प्रॉपर्टी से मेल खाती है, इसलिए '[चयनित]' में विशेषता के लिए पूछताछ उन तत्वों को वापस कर देगी जिनके पास 'डिफ़ॉल्ट चयन' DOM प्रॉपर्टी 'सत्य' पर सेट की गई है। –

संबंधित मुद्दे