ทริกเกอร์เหตุการณ์การเปลี่ยนแปลงของเมนูแบบเลื่อนลง


86

ฉันต้องการทริกเกอร์เหตุการณ์การเปลี่ยนแปลงของดรอปดาวน์ใน $ (เอกสาร) ใช้ jquery

ฉันมีรายการแบบเลื่อนลงแบบเรียงซ้อนสำหรับประเทศและรัฐในหน้ารายละเอียดผู้ใช้ ฉันจะตั้งค่า (ซึ่งนำมาจาก DB ตาม ID ผู้ใช้) สำหรับประเทศและรัฐใน MVC ด้วย C # ได้อย่างไร


คุณอาจต้องการใส่แท็กอื่น ๆ เช่น javascript และ jQuery เพื่อให้ได้สิ่งนี้มากขึ้น
xenon

คำตอบ:


185

ฉันไม่รู้ 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()ตามที่แสดงไว้อย่างถูกต้องในคำตอบนี้นั่นคือถ้ารหัสตัวจัดการเหตุการณ์ปรากฏขึ้นตามการเรียกไม่มีอะไรเกิดขึ้น! :)
Leniel Maccaferri

3
@LenielMacaferi ขอบคุณที่ช่วยฉันสักชั่วโมงสองชั่วโมง
Frank Nocke

@Christophe Eblé & Leniel Macaferi ขอบคุณมาก Christophe คุณช่วยเพิ่มความคิดเห็นของ Leniel ในคำตอบของคุณได้ไหม
Zaxter

ฉันใช้. change () แต่ไม่มีโชคกับ jquery 3.1.1 หลังจากโพสต์นี้มันจะถูกเรียกใช้
Sorangwala Abbasali

สิ่งนี้จบลงด้วยการวนซ้ำไม่รู้จบการแก้ปัญหาของทุกคนจะจบลงด้วยการวนซ้ำ
Nathan McKaskle

12

ลองสิ่งนี้:

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

กำหนดเหตุการณ์การเปลี่ยนแปลงและทริกเกอร์ทันที สิ่งนี้ช่วยให้มั่นใจได้ว่ามีการกำหนดตัวจัดการเหตุการณ์ก่อนที่จะเรียกใช้

อาจจะสายที่จะตอบผู้โพสต์ต้นฉบับ แต่อาจมีคนอื่นได้รับประโยชน์จากสัญกรณ์ชวเลขและสิ่งนี้เป็นไปตามการผูกมัดของ jQuery เป็นต้น

jquery chaining


7

ลองสิ่งนี้:

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

ใช้ได้ผลสำหรับฉัน

ในบรรทัดเดียวพร้อมกับการตั้งค่า: $('#id').val(16).change();


3
$ ('# id'). val (16) .change (); ทำเพื่อฉัน
TomoMiha

1
ขอบคุณ @TomoMiha เพิ่มไว้ในคำตอบ
d.popov

2

หากคุณกำลังพยายามเชื่อมโยงดรอปดาวน์วิธีที่ดีที่สุดคือการมีสคริปต์ที่ส่งคืนกล่องเลือกที่สร้างไว้ล่วงหน้าและการเรียก AJAX ที่ร้องขอ

นี่คือเอกสารสำหรับวิธี 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);
            }
        });
    });

});

จากนั้นมีช่วงรอบ ๆ กล่องเลือกสถานะของคุณโดยมี id ของ "stateBoxHook"


ฉันมีดรอปดาวน์แบบเรียงซ้อน: <% = Html.DropDownList ("MyCountries", "--- เลือกประเทศ ---")%> <% = Html.CascadingDropDownList ("MyStates", "MyCountries")%> ฉันสามารถตั้งค่า มูลค่าของ MyCountries เป็น $ ("# MyCountries"). val ('<% = Model.CountryId%>'); ใน $ (เอกสาร). พร้อม. แต่ฉันไม่สามารถตั้งค่าสำหรับสถานะได้เนื่องจากแสดงเพียงตัวเลือกเดียว "เลือกสถานะ" ซึ่งควรกรอกในเหตุการณ์ onchange ของประเทศเนื่องจากเป็นรายการแบบเลื่อนลงแบบเรียงซ้อน นี่คือปัญหาที่เกิดขึ้นจริง
ประสาท

ยังไม่แน่ใจว่าคุณเป็นอย่างไร คุณกำลังพยายามบรรลุระบบโดยที่พวกเขาเลือกประเทศและ จำกัด รายการให้แคบลงเหลือเพียงรัฐในประเทศนั้นหรือไม่? หากเป็นกรณีนี้คุณจะต้องมีการเรียก AJAX ไปยังเซิร์ฟเวอร์และส่งออกนอกประเทศที่เลือกจากนั้นส่งคืนรายชื่อรัฐในประเทศนั้น
ซีนอน

ฉันได้ตั้ง USA เป็น Country & Alabama เป็น State ซึ่งเป็นรายการแบบเลื่อนลงแบบเรียงซ้อนในขณะที่เพิ่มโปรไฟล์ผู้ใช้ และเมื่อฉันกลับมาที่หน้านั้นเพื่อแก้ไขฟิลด์ฉันต้องการให้ประเทศและรัฐถูกเติมด้วยค่าที่ฉันได้ตั้งไว้ก่อนหน้านี้ ฉันไม่มีปัญหาในการเพิ่มโปรไฟล์ผู้ใช้เมื่อฉันกลับมาที่หน้าเพื่อแก้ไขฉันสามารถตั้งค่าสำหรับรายการแบบเลื่อนลงของประเทศและในสถานะแบบเลื่อนลงค่าจะไม่ถูกเติมเนื่องจากเป็นแบบเรียงซ้อนซึ่งจะเติมค่าประเทศ เปลี่ยนแปลงเหตุการณ์ สำหรับสิ่งนี้ฉันต้องทริกเกอร์เหตุการณ์การเปลี่ยนแปลงของประเทศเพื่อให้รัฐได้รับการเติมและฉันสามารถตั้งค่าสถานะได้
Prasad

เหตุใดจึงเป็นเช่นนี้ คุณรู้ว่าประเทศเป็นอย่างไรในเวลาโหลดหน้าเว็บดังนั้นคุณสามารถแสดงรายการเลือกรัฐที่ถูกต้องโดยเลือกสถานะที่ถูกต้อง เมื่อคุณเปลี่ยนประเทศรายการจะถูกโหลดซ้ำอยู่ดี
ซีนอน

1

หรือคุณสามารถใส่ onchange แอตทริบิวต์ในรายการแบบเลื่อนลงได้โดย onchange จะเรียกฟังก์ชัน jquery บางอย่างเช่นนี้

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

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

หวังว่ารหัสนี้จะช่วยคุณได้และโปรดทราบว่ารหัสนี้เป็นเพียงร่างคร่าวๆเท่านั้นไม่ได้ทดสอบกับแนวคิดใด ๆ ขอบคุณ


สิ่งนี้ไม่ทำให้เกิดเหตุการณ์การเปลี่ยนแปลงเมื่อหน้าเว็บโหลดครั้งแรก (ตามคำถามของ OP)

0

ด้วยเหตุผลบางอย่างอื่น ๆjQueryการแก้ปัญหาให้ที่นี่ทำงานเมื่อใช้สคริปต์จากคอนโซล แต่มันไม่ได้ทำงานสำหรับฉันเมื่อมีการเรียกจาก Chrome Bookmarklets

โชคดีที่โซลูชัน Vanilla JS ( 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>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.