ड्रॉपडाउन का ट्रिगर परिवर्तन घटना


86

मैं $ (दस्तावेज़) में ड्रॉपडाउन के परिवर्तन की घटना को ट्रिगर करना चाहता हूं। पहले से ही jquery का उपयोग कर रहा हूं।

मेरे पास उपयोगकर्ता विवरण पृष्ठ में देश और राज्य के लिए एक कैस्केडिंग ड्रॉपडाउन है। मैं MVC में C # के साथ देश और राज्य के लिए मान (जो DB से यूजर आईडी के आधार पर लिया गया है) कैसे सेट कर सकता हूं।


आप इसे पाने के लिए जावास्क्रिप्ट और jQuery जैसे कुछ और टैग लगा सकते हैं
xenon

जवाबों:


184

मुझे नहीं पता कि इतना JQuery लेकिन मैंने सुना है कि यह इस सिंटैक्स के साथ देशी घटनाओं को आग लगाने की अनुमति देता है।

$(document).ready(function(){

    $('#countrylist').change(function(e){
       // Your event handler
    });

    // And now fire change event when the DOM is ready
    $('#countrylist').trigger('change');
});

ट्रिगर () या परिवर्तन () को कॉल करने से पहले आपको परिवर्तन ईवेंट हैंडलर घोषित करना होगा अन्यथा इसे निकाल नहीं दिया जाएगा। इस @LenielMacaferi उल्लेख के लिए धन्यवाद।

अधिक जानकारी यहाँ


13
आपको कॉल करने से पहले परिवर्तन ईवेंट हैंडलर की घोषणा करनी चाहिए trigger()या यहां तक change()कि इस उत्तर में सही तरीके से दिखाया गया है, यानी यदि ईवेंट हैंडलर कोड कॉल के लिए बोल्ड दिखाई देता है, तो कुछ भी नहीं होता है! :)
लेनियल मैकाफेर्री

3
@LenielMacaferi मुझे एक या दो घंटे बचाने के लिए धन्यवाद।
फ्रैंक नॉके

@ क्रिस्तोपे एब्ले और लेनियल मैकफेरी, बहुत बहुत धन्यवाद। क्रिस्टोफ़, क्या आप अपने जवाब में लेनियल की टिप्पणी जोड़ सकते हैं?
ज़ाक्सर

मैंने .change () का उपयोग किया था, लेकिन jquery के साथ कोई किस्मत नहीं 3.1.1, इस पोस्ट के बाद यह अपेक्षा के अनुरूप है।
सोरंगवाला अब्बासाली

यह बस अंतहीन रूप से लूपिंग को समाप्त करता है, इसके समाधान का हर कोई लूपिंग समाप्त करता है।
नाथन मैककसल

12

इसे इस्तेमाल करे:

$(document).ready(function(event) {
    $('#countrylist').change(function(e){
         // put code here
     }).change();
});

परिवर्तन घटना को परिभाषित करें, और इसे तुरंत ट्रिगर करें। यह सुनिश्चित करता है कि इवेंट हैंडलर को कॉल करने से पहले परिभाषित किया जाए।

मूल पोस्टर का उत्तर देने में देर हो सकती है, लेकिन शॉर्टहैंड नोटेशन से किसी और को लाभ हो सकता है, और यह jQuery के चेनिंग, आदि का अनुसरण करता है।

जंकरी चाइनिंग


7

इसे इस्तेमाल करे:

$('#id').change();

मेरे लिये कार्य करता है।

मान सेट करने के साथ एक पंक्ति में: $('#id').val(16).change();


3
$ ( '# आईडी') वैल (16) .change ()।; मेरे लिए किया।
टॉममोइहा

1
धन्यवाद, @TomoMiha जवाब में जोड़ दिया।
d.popov

2

यदि आप लिंक किए गए ड्रॉप डाउन की कोशिश कर रहे हैं, तो ऐसा करने का सबसे अच्छा तरीका एक स्क्रिप्ट है जो प्रीबिल्ट सेलेक्ट बॉक्स और एक AJAX कॉल देता है जो इसे अनुरोध करता है।

यहां आपको आवश्यकता पड़ने पर jQuery के अजाक्स विधि के लिए प्रलेखन है।

$(document).ready(function(){

    $('#countrylist').change(function(e){
        $this = $(e.target);
        $.ajax({
            type: "POST",
            url: "scriptname.asp", // Don't know asp/asp.net at all so you will have to do this bit
            data: { country: $this.val() },
            success:function(data){
                $('#stateBoxHook').html(data);
            }
        });
    });

});

फिर "StateBoxHook" की आईडी के साथ अपने राज्य चयन बॉक्स के चारों ओर एक स्पैन रखें


मेरे पास कैस्केडिंग ड्रॉपडाउन हैं: <% = Html.DropDownList ("MyCountries", "--- देश चुनें ---")%> <% = Html.CascadingDropDownList ("MyStates", "MyCountries")%> मैं सेट कर सकता हूं $ के रूप में MyCountries का मूल्य ("# MyCountries")। वैल ('<% = Model.CountryId%>'); $ में (दस्तावेज़)। लेकिन राज्य के लिए मूल्य निर्धारित करने में सक्षम नहीं है क्योंकि यह केवल एक विकल्प "सिलेक्ट स्टेट" को दर्शाता है, जिसे देश ऑनकॉन्ग इवेंट पर भरा जाना चाहिए क्योंकि वे ड्रॉपडाउन हैं। यह वास्तविक मुद्दा है।
प्रसाद

फिर भी यकीन नहीं होता कि आप आखिर हैं क्या। क्या आप एक ऐसी प्रणाली को प्राप्त करने की कोशिश कर रहे हैं जिसके तहत वे किसी देश का चयन करते हैं और यह सूची को उस देश के राज्यों तक पहुंचाता है? यदि यह मामला है, तो आपको सर्वर पर AJAX कॉल करना होगा और चयनित देश को भेजना होगा और फिर उस देश में राज्यों की एक सूची वापस करनी होगी।
क्सीनन

मैंने यूएसए को देश और अलबामा के रूप में राज्य के रूप में सेट किया है जो उपयोगकर्ता प्रोफ़ाइल को जोड़ते हुए एक कैस्केडिंग ड्रॉपडाउन है। और जब मैं एक क्षेत्र को संपादित करने के लिए उस पृष्ठ पर वापस आता हूं, तो मुझे देश और राज्य को उन मूल्यों के साथ आबाद करने की आवश्यकता है जो मैंने पहले सेट किए हैं। मुझे उपयोगकर्ता प्रोफ़ाइल को जोड़ने में कोई समस्या नहीं है, जब मैं संपादित करने के लिए पृष्ठ पर वापस आता हूं, तो मैं देश ड्रॉपडाउन के लिए मान सेट करने में सक्षम हूं और राज्य ड्रॉपडाउन में मान भरे नहीं जाते हैं क्योंकि यह कैस्केडिंग है जो देश मूल्य पर भर जाता है घटना बदलें। इसके लिए मुझे देश की परिवर्तन घटना को ट्रिगर करने की आवश्यकता है ताकि राज्य भर जाए और मैं राज्य सेट कर
प्रसाद

यह एक केस क्यों है? आप जानते हैं कि देश पृष्ठ लोड समय पर क्या है, इस प्रकार आप चयनित राज्य के साथ राज्यों की सही चयन सूची प्रस्तुत कर सकते हैं। जब आप देश बदलते हैं तो सूची फिर से लोड हो जाएगी।
क्सीनन

1

वैकल्पिक रूप से आप स्वयं ड्रॉपडाउन सूची में ऑन्चेंज विशेषता डाल सकते हैं, ऑन्चेंज इस तरह से कुछ jquery फ़ंक्शन को कॉल करेगा।

<input type="dropdownlist" onchange="jqueryFunc()">

<script type="text/javascript">
$(function(){
    jqueryFunc(){
        //something goes here
    }
});
</script>

उम्मीद है कि यह आपकी मदद करता है, और कृपया ध्यान दें कि यह कोड केवल एक मोटा मसौदा है, किसी भी विचारधारा पर परीक्षण नहीं किया गया है। धन्यवाद


यह परिवर्तन घटना को ट्रिगर नहीं करता है जब पृष्ठ पहले लोड होता है (ओपी के सवाल के अनुसार)

0

किसी कारण से, अन्य jQueryयहाँ प्रदान समाधान काम किया जब कंसोल से स्क्रिप्ट चलाने, तथापि, यह काम नहीं किया था मेरे लिए जब क्रोम से शुरू हो रहा बुकमार्कलेट

सौभाग्य से, इस वेनिला जेएस समाधान ( triggerChangeEventफ़ंक्शन) ने काम किया:

/**
  * Trigger a `change` event on given drop down option element.
  * WARNING: only works if not already selected.
  * @see /programming/902212/trigger-change-event-of-dropdown/58579258#58579258
  */
function triggerChangeEvent(option) {
  // set selected property
  option.selected = true;
  
  // raise event on parent <select> element
  if ("createEvent" in document) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    option.parentNode.dispatchEvent(evt);
  }
  else {
    option.parentNode.fireEvent("onchange");
  }
}

// ################################################
// Setup our test case
// ################################################

(function setup() {
  const sel = document.querySelector('#fruit');
  sel.onchange = () => {
    document.querySelector('#result').textContent = sel.value;
  };
})();

function runTest() {
  const sel = document.querySelector('#selector').value;
  const optionEl = document.querySelector(sel);
  triggerChangeEvent(optionEl);
}
<select id="fruit">
  <option value="">(select a fruit)</option>
  <option value="apple">Apple</option>
  <option value="banana">Banana</option>
  <option value="pineapple">Pineapple</option>
</select>

<p>
  You have selected: <b id="result"></b>
</p>
<p>
  <input id="selector" placeholder="selector" value="option[value='banana']">
  <button onclick="runTest()">Trigger select!</button>
</p>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.