2016-01-29 16 views
7

से अचयनित विकल्प प्राप्त करें मेरे पास एक से अधिक चयन सूची है। जब उपयोगकर्ता चयनित विकल्प को अचयनित करता है, तो मैं उपयोगकर्ता द्वारा किए गए अचयनित विकल्प के मान को जानना चाहता हूं। मैं इसे कैप्चर कैसे करूं?एकाधिक चयन सूची

मेरा नमूना कोड नीचे जैसा है।

<select multiple> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="opel">Opel</option> 
    <option value="audi">Audi</option> 
</select> 

मैं उपयोगकर्ता कई विकल्प

$('option').mousedown(function(){ 
    e.preventDefault(); 
    $(this).prop('selected', $(this).prop('selected') ? false :true); 
}); 
+0

प्राप्त आप प्राप्त करना चाहते हैं बनाने की कोशिश कर सकते क्लिक ईवेंट, और जांचें कि लक्ष्य का मूल्य अचयनित है या नहीं। यदि ऐसा है, तो आपको अभी अनचेक मान मिल गया है। मैं अभी आपके लिए एक पहेली बना दूंगा। – Casey

+0

माउस घटनाओं ने क्रॉस ब्राउज़र का समर्थन नहीं किया है। मूल्य के साथ आपको विशेष रूप से क्या करने की आवश्यकता है? – charlietfl

+0

@Casey जो क्रॉस ब्राउज़र – charlietfl

उत्तर

-1

अगर मैं तुम्हें सही ढंग से समझ का चयन करने की अनुमति के लिए jQuery कोड निम्नलिखित है, तो आप विकल्प है कि बस, अचयनित मिला है ना?

यदि हां, तो इस कोशिश:

एक चर "lastSelectedValue" बनाने के (या जो भी आप इसे कॉल करना चाहते हैं)। आप किसी विकल्प का चयन करते हैं, यह करने के लिए असाइन करते हैं, जब आपके द्वारा चयनित विकल्प नहीं बदलेंगे, आप मूल्य प्राप्त कर सकते हैं और इसका इस्तेमाल करते हैं, और फिर से

var lastSelectedOption = ''; 
$('select').on('change', function(){ 
    //do what you need to do 
    lastSelectedOption = this.val(); 
}); 

यहाँ यह करने के लिए आवंटित एक बेला है: https://jsfiddle.net/ahmadabdul3/xja61kyx/

कई के साथ अद्यतन : https://jsfiddle.net/ahmadabdul3/xja61kyx/

यह सुनिश्चित नहीं है कि यह वही है जो आपको चाहिए। कृपया प्रदान प्रतिक्रिया

+0

पर काम नहीं करेगा लेकिन ओपी कई से निपट रहा है जो एक सरणी देता है। इसके अलावा 'this.val()' अमान्य है – charlietfl

+0

ओह, मैंने यह नहीं देखा कि, मैं उत्तर –

+0

@ पैराग अपडेट कर सकता हूं, वह इसे कई विकल्प के साथ चाहता था लेकिन आपने अभी भी एक विकल्प प्रदान किया था। –

1

माउस घटनाओं

मेरे सुझाव हमेशा होगा चयन पर पिछले मूल्यों की दुकान सरणी पार ब्राउज़र उपलब्ध नहीं हैं।

हर पर आप तो पहले मान सरणी के लिए तुलना कर सकते हैं और एक बार पाया अद्यतन संग्रहीत सरणी

$('#myselect').on('change', function() { 
    var $sel = $(this), 
    val = $(this).val(), 
    $opts = $sel.children(), 
    prevUnselected = $sel.data('unselected'); 
    // create array of currently unselected 
    var currUnselected = $opts.not(':selected').map(function() { 
    return this.value 
    }).get(); 
    // see if previous data stored 
    if (prevUnselected) { 
     // create array of removed values   
     var unselected = currUnselected.reduce(function(a, curr) { 
     if ($.inArray(curr, prevUnselected) == -1) { 
      a.push(curr) 
     } 
     return a 
     }, []); 
     // "unselected" is an array 
     if(unselected.length){ 
     alert('Unselected is ' + unselected.join(', ')); 
     } 

    } 
    $sel.data('unselected', currUnselected) 
}).change(); 

DEMO

+0

यह काम करता है यदि आप एक आइटम को अनचेक करते हैं लेकिन गुणकों के लिए, यह केवल अंतिम चयनित मान देता है। – DinoMyte

+0

@DinoMyte यह सुनिश्चित नहीं है कि आपका क्या मतलब है। मेरी व्याख्या यह है कि ओपी प्रत्येक मूल्य को अचयनित करता है क्योंकि इसे अचयनित किया गया है – charlietfl

+0

@DinoMyte ठीक है ... मैं केवल 'Ctrl + click' का उपयोग कर रहा था, मुझे लगता है कि अगर आप स्विफ्ट – charlietfl

-1

दूसरों के द्वारा उल्लेख किया है, कुंजी तुलना करने के लिए किया जाएगा बदल मौजूदा मूल्य के साथ पिछले चयनित मूल्य। चूंकि आपको हटाए गए मान को समझने की आवश्यकता है, इसलिए आप lastSelected.length > currentSelected.length देख सकते हैं और फिर परिणामों को प्राप्त करने के लिए अंतिम चयनित से वर्तमान चयनित को प्रतिस्थापित कर सकते हैं।

var lastSelected = ""; 
$('select').on('change', function() { 
    var currentSelected = $(this).val(); 
    if (lastSelected.length > currentSelected.length) { 
     var a = lastSelected.toString().replace(currentSelected.toString(),""); 
     alert("Removed value : " + a.replace(",","")); 
    }  
     lastSelected = currentSelected; 
}); 

कार्य उदाहरण: https://jsfiddle.net/DinoMyte/cw96h622/3/

+0

'' 'ctrl''' या' '' cmd''' का उपयोग करके सभी विकल्प का चयन करें, फिर आप '' '' '' '' '' '' '' '' '' '' ' '' 'ctrl''' या' 'cmd''' हो रहा है, आप देखेंगे कि परिणाम गलत है। –

0

महान सवाल है, मैं इसे नहीं चुना जाता विकल्पों डेटा विशेषताओं का उपयोग पता लगाने के लिए कुछ कोड लिखा था।

$('#select').on('change', function() { 
 
    var selected = $(this).find('option:selected'); 
 
    var unselected = $(this).find('option:not(:selected)'); 
 
    selected.attr('data-selected', '1'); 
 
    $.each(unselected, function(index, value){ 
 
    \t if($(this).attr('data-selected') == '1'){ 
 
     \t  //this option was selected before 
 
      alert("I was selected before " + $(this).val()); 
 
      $(this).attr('data-selected', '0'); 
 
     } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select multiple id="select"> 
 
<option data-selected=0 value="volvo">Volvo</option> 
 
<option data-selected=0 value="saab">Saab</option> 
 
<option data-selected=0 value="opel">Opel</option> 
 
<option data-selected=0 value="audi">Audi</option> 
 
</select>

-1

आप इसे

$('#link_to_id').find('option').not(':selected').each(function(k,v){ 
    console.log(k,v.text, v.value); 
}); 

v.text v.value के साथ पाठ

पाने के साथ मूल्य

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