เหตุการณ์การเปลี่ยนแปลงทริกเกอร์ <select> โดยใช้ jquery


146

มีอยู่แล้วฉันสามารถทริกเกอร์เหตุการณ์การเปลี่ยนแปลงในกล่องเลือกในการโหลดหน้าและเลือกตัวเลือกเฉพาะ

ฟังก์ชั่นที่ดำเนินการโดยการเพิ่มทริกเกอร์หลังจากเชื่อมโยงฟังก์ชันกับเหตุการณ์

ฉันพยายามที่จะแสดงผลออกมาเช่นนี้

<select class="check">
<option value="one">one</option>
<option value="two">two</option>
</select>

$(function(){
    $('.check').trigger('change'); //This event will fire the change event. 
    $('.check').change(function(){
      var data= $(this).val();
      alert(data);            
    });
});

http://jsfiddle.net/v7QWd/1/


คุณต้องการตั้งค่าตัวเลือกเฉพาะขณะโหลดหรือไม่ หรือคุณต้องการที่จะทริกเกอร์เหตุการณ์การเปลี่ยนแปลงของคุณ?
Manse

คุณช่วยขยายโซลูชันสุดท้ายได้ไหม คุณกำลังพยายามบังคับใช้ตัวเลือกเมื่อเพจโหลดหรือเลือกตัวเลือกอื่นเมื่อมีการเลือกบางอย่างหรือไม่?
Matthew Riches

สวัสดีขอบคุณสำหรับคำติชมของคุณฉันสามารถแก้ไขปัญหาและบันทึกเป็นเอกสารได้
kishanio

คำตอบ:


289

ใช้val()เพื่อเปลี่ยนเป็นค่า (ไม่ใช่ข้อความ) และtrigger()เพื่อดำเนินการเหตุการณ์ด้วยตนเอง

จะต้องประกาศตัวจัดการเหตุการณ์การเปลี่ยนแปลงก่อนที่จะทริกเกอร์

นี่คือตัวอย่าง

$('.check').change(function(){
  var data= $(this).val();
  alert(data);            
});

$('.check')
    .val('two')
    .trigger('change');

นอกจากนี้หลังจากเปลี่ยนตัวเลือกฉันต้องการเรียกใช้งานฟังก์ชันเหตุการณ์การเปลี่ยนแปลง WRT นี้ กล่องแจ้งเตือนควรดำเนินการ
kishanio

@ KishanThobhani คุณควรเรียกว่าหลังจากเพิ่มตัวจัดการ ดูตัวอย่าง
โจเซฟ

7
ส่วนที่สำคัญของการแก้ปัญหานี้คือ: ตัวจัดการเหตุการณ์การเปลี่ยนแปลงจะต้องแจ้งให้ทราบก่อนที่จะทริกเกอร์ (ทำให้รู้สึก ... ) ในกรณีของฉันที่เป็นปัญหาขอบคุณ!
Larzan

มันช่วยในฐานะผู้ช่วยให้รอด, ขอบคุณ @Joseph
Divya

ฟังก์ชั่นการเปลี่ยนแปลงที่กำหนดไว้ก่อนที่คุณจะใช้แก้ไขปัญหาของฉัน ขอบคุณ
Kamlesh

28

ในการเลือกตัวเลือกให้ใช้.val('value-of-the-option')องค์ประกอบที่เลือก ที่จะเรียกองค์ประกอบการเปลี่ยนแปลงให้ใช้หรือ.change().trigger('change')

ปัญหาในรหัสของคุณคือเครื่องหมายจุลภาคแทนที่จะเป็นจุดใน$('.check'),trigger('change');และความจริงที่ว่าคุณเรียกมันก่อนที่จะผูกตัวจัดการเหตุการณ์


10
$('#edit_user_details').find('select').trigger('change');

มันจะเปลี่ยนเลือก HTML id="edit_user_details"แท็กรายการแบบหล่นลงกับ


7

อีกวิธีการแก้ปัญหาการทำงานสำหรับผู้ที่ถูกบล็อกด้วย jQuery trigger handler ที่การดับไฟของเหตุการณ์ในท้องถิ่นจะเป็นดังนี้ (ทำงานได้ 100%):

var sortBySelect = document.querySelector("select.your-class"); 
sortBySelect.value = "new value"; 
sortBySelect.dispatchEvent(new Event("change"));

1
ฉันลองทั้งหมดข้างต้น แต่มีเพียงอันนี้เท่านั้นที่เหมาะกับฉัน ฉันคิดว่าเพราะการเลือกของฉันอยู่ภายใน vue ขอบคุณ @ Mohamed23gharbi!
Tillito

1
กันที่นี่ นี่เป็นวิธีแก้ปัญหาที่ฉันกำลังมองหาเป็นเวลาหนึ่งชั่วโมง ขอบคุณ
mberna

1
นี่ต้องเป็นคำตอบ!
MARS

1

ให้ลิงก์ในค่าของแท็กตัวเลือก

<select size="1" name="links" onchange="window.location.href=this.value;">
   <option value="http://www.google.com">Google</option>
   <option value="http://www.yahoo.com">Yahoo</option>
</select>

1

หากคุณต้องการตรวจสอบบางอย่างแล้วใช้วิธีนี้

 <select size="1" name="links" onchange="functionToTriggerClick(this.value)">
    <option value="">Select a Search Engine</option>        
    <option value="http://www.google.com">Google</option>
    <option value="http://www.yahoo.com">Yahoo</option>
</select>

<script>

   function functionToTriggerClick(link) {

     if(link != ''){
        window.location.href=link;
        }
    }  

</script>

0

ขึ้นอยู่กับคำตอบของ Mohamed23gharbi:

function change(selector, value) {
    var sortBySelect = document.querySelector(selector);
    sortBySelect.value = value;
    sortBySelect.dispatchEvent(new Event("change"));
}

function click(selector) {
    var sortBySelect = document.querySelector(selector);
    sortBySelect.dispatchEvent(new Event("click"));
}

function test() {
    change("select#MySelect", 19);
    click("button#MyButton");
    click("a#MyLink");
}

ในกรณีของฉันที่องค์ประกอบถูกสร้างขึ้นโดย vue นี่เป็นวิธีเดียวที่ใช้งานได้


0

คุณสามารถลองรหัสด้านล่างเพื่อแก้ปัญหาของคุณ:

โดยค่าเริ่มต้นตัวเลือกแรกเลือก: jQuery ('เลือก'). find ('ตัวเลือก') [0] .selected = true;

ขอบคุณ Ketan T

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