2011-11-20 17 views
5

मुझे एकाधिक इनपुट के लिए बाध्यकारी मिला है।मैं कैसे बता सकता हूं कि वास्तव में चेकबॉक्स वास्तव में क्लिक किया गया था या नहीं?

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something here 
    // do something extra here if $(this) was actually clicked 
}); 

के बाद से वहाँ एक इनपुट, (jQuery के .change() एक के लिए विधि) का एक परिवर्तन की शुरुआत के अन्य तरीके हैं, वहाँ एक रास्ता है, तो एक चेकबॉक्स वास्तव में परिवर्तन घटना पैदा करने के लिए क्लिक किया गया था बताने के लिए है?

मैंने फोकस करने की कोशिश की, हालांकि फोकस ईवेंट चेकबॉक्स के परिवर्तन ईवेंट से पहले आग लग जाता है ताकि यह काम न करे।

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something here 
    if($(this).is(":focus")) // do something extra here but focus doesn't happen here for checkboxes. 
}); 

# संपादित करें 1

खेद है कि मैं वास्तव में नहीं जानता कि यह आगे स्पष्ट करने के लिए कैसे ... मुझे परवाह नहीं है अगर चेकबॉक्स चयनित है या नहीं ... मुझे पता है क्या। है (": चेक किया गया") है और इसका उपयोग कैसे करें। यह यहां मदद नहीं करता है। मैं केवल यह जानना चाहता हूं कि परिवर्तन ईवेंट को ट्रिगर करने के लिए चेकबॉक्स वास्तव में क्लिक किया गया था या नहीं।

# संपादित 2

मैं चारों ओर एक काम है ... मैं पहली बार इनपुट और चयन के लिए क्लिक करता है बाँध और तत्व की आईडी की दुकान। फिर मेरे परिवर्तन बाध्यकारी में मैं यह देखने के लिए जांच करता हूं कि क्या तत्व बदल गया है वह वही तत्व है जिसे अंतिम बार क्लिक किया गया था।

$("input, select").click(function() { 
    var myId = $(this).attr("id"); 
    lastClickedStore.lastClicked = myId; 
}); 

फिर बाध्यकारी में परिवर्तन में मैं जांचता हूं कि वर्तमान आईडी अंतिम क्लिक आईडी के बराबर है या नहीं।

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something 
    if(lastClickedStore.lastClicked == $(this).attr("id")) // do something else. 
} 
+0

शायद $ (this.id) आपको इसकी पहचान करने में मदद करेगा। मेरे संपादित उत्तर की जांच करें। क्षमा करें अगर मैं मंडलियों में जा रहा हूँ। –

उत्तर

0

तो यहां मैंने इस समस्या को हल किया है। मैं पहले इनपुट के लिए क्लिक बांधता हूं और तत्व की आईडी का चयन और स्टोर करता हूं।फिर मेरे परिवर्तन बाध्यकारी में मैं यह देखने के लिए जांच करता हूं कि क्या तत्व बदल गया है वह वही तत्व है जिसे अंतिम बार क्लिक किया गया था।

$("input, select").click(function() { 
    var myId = $(this).attr("id"); 
    lastClickedStore.lastClicked = myId; 
}); 

फिर बाध्यकारी में परिवर्तन में मैं जांचता हूं कि वर्तमान आईडी अंतिम क्लिक आईडी के बराबर है या नहीं।

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something 
    if(lastClickedStore.lastClicked == $(this).attr("id")) // do something else. 
} 
0

अगर ($ (this) .is (': जाँच की')) ....

अगर ($ (this) .attr ('जाँच')) ...

संपादित करें: यदि सभी चेकबॉक्स "परिवार" के लिए हैं, तो सुनिश्चित करें कि प्रत्येक आइटम के लिए नाम = समान-के-सभी-आइटम और आईडी = अलग-अलग परिभाषित करके केवल एक को चेक किया जा सकता है।

Ex: 

<input type='checkbox' name='fruits' id='orange' >orange 
<input type='checkbox' name='fruits' id='melon' >melon 
<input type='checkbox' name='fruits' id='banana' >banana 
<input type='checkbox' name='fruits' id='apple' >apple 
<input type='checkbox' name='fruits' id='...' >.... 

EDIT: if it was clicked: the id? 

console.log($(this.id)); 
+0

शायद मुझे अपने प्रश्न को स्पष्ट करने की ज़रूरत है ... यदि चेकबॉक्स चेक किया गया है या नहीं तो मुझे कोई परवाह नहीं है। मुझे लगता है कि परिवर्तन घटना को ट्रिगर करने के लिए इसे क्लिक किया गया था। – kasdega

0

तुम क्या कर कोशिश कर सकते हैं:

 
$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("click", function() { 
    // do something here 
    if($(this).is(":checked")) // do something extra here but focus doesn't happen here for checkboxes. 
}); 

आशा है कि यह click बजाय change करने में मदद करता

10

बाइंड। click घटना अभी भी जब चेक बॉक्स का राज्य कीबोर्ड के साथ बदल गया है शुरू हो जाएगा, लेकिन event.pageX और event.pageY उस मामले में 0 हो जाएगा, तो आप लिख सकते हैं:

$("#foo, #bar, #fooCheckbox, #barCheckBox").click(function(event) { 
    // Do something here... 
    if (event.pageX > 0) { 
     // Check box was clicked, do something extra here... 
    } 
}); 
+0

ब्रावो ............. – Rafay

+0

दिलचस्प ... हालांकि मुझे काफी कुछ नहीं मिलता है जो मुझे चाहिए। "परिवर्तन" के लिए बाध्यकारी एक कारण के लिए है। क्लिक का मतलब हर बार परिवर्तन नहीं होता है, खासकर इस स्थिति में जहां #foo एक चुनिंदा बॉक्स है। हालांकि, यह सब कहा जा रहा है, पेजएक्स के बारे में उत्कृष्ट विचार, मुझे इसे शामिल करना होगा। – kasdega

-1

इस प्रयास करें:

<input type="checkbox" onClick="doSomething()"> 

    or 

$("#foo","#bar","#fooCheckbox","#barCheckBox").click(function(){ 
    doSomething(); 
}); 
+0

डी स्वयं वॉय टी एस? –

1

Frédéric Hamidi उत्तर अच्छा है। लेकिन यदि आप प्रोग्रामेटिक रूप से एक ईवेंट 'चेंज' जुटाना चाहते हैं, तो उसका कोड दुर्भाग्य से काम नहीं करेगा।

$('#foo, #bar').bind({ 
    click: function() { 
     alert('click ' + this.id); 
     if ($(this).hasClass('changed')) { 
      alert('click+change ' + this.id); 
      $(this).removeClass('changed'); 
     } 
    }, 
    change: function() { 
     alert('change ' + this.id); 
     $(this).addClass('changed'); 
    } 
}); 

Demo: तुम सच में तुम क्या वर्णित चाहते हैं, इस संस्करण का प्रयास करें।

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

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