การเพิ่มเหตุการณ์ onClick แบบไดนามิกโดยใช้ jQuery


128

เนื่องจากมีการใช้ปลั๊กอินฉันจึงไม่สามารถเพิ่มแอตทริบิวต์ "onClick" ให้กับอินพุตแบบฟอร์ม HTML ได้เหมือนปกติ ปลั๊กอินกำลังจัดการส่วนของแบบฟอร์มในไซต์ของฉันและไม่มีตัวเลือกให้ดำเนินการนี้โดยอัตโนมัติ

โดยทั่วไปฉันมีข้อมูลนี้:

<input type="text" id="bfCaptchaEntry" name="bfCaptchaEntry" style="">

ฉันต้องการเพิ่ม onClick ด้วย jQuery onload เพื่อให้เป็นเช่นนี้:

<input onClick="myfunction()" type="text" id="bfCaptchaEntry" name="bfCaptchaEntry" style="">

ฉันจะทำสิ่งนี้ได้อย่างไร?

ฉันรู้ว่านี่อาจไม่ใช่แนวปฏิบัติมาตรฐาน แต่ดูเหมือนเป็นทางเลือกที่ง่ายที่สุดที่จะทำในสถานการณ์ของฉัน

ฉันเป็นมือใหม่ของ jQuery ดังนั้นความช่วยเหลือใด ๆ จึงได้รับการชื่นชมอย่างมาก

คำตอบ:


211

คุณสามารถใช้clickเหตุการณ์และเรียกใช้ฟังก์ชันของคุณหรือย้ายตรรกะของคุณไปที่ตัวจัดการ:

$("#bfCaptchaEntry").click(function(){ myFunction(); });

คุณสามารถใช้clickเหตุการณ์และตั้งค่าฟังก์ชันของคุณเป็นตัวจัดการ:

$("#bfCaptchaEntry").click(myFunction);

.คลิก()

ผูกตัวจัดการเหตุการณ์กับเหตุการณ์ JavaScript "คลิก" หรือทริกเกอร์เหตุการณ์นั้นในองค์ประกอบ

http://api.jquery.com/click/


คุณสามารถใช้onเหตุการณ์ที่ผูกไว้"click"และเรียกใช้ฟังก์ชันของคุณหรือย้ายตรรกะของคุณไปยังตัวจัดการ:

$("#bfCaptchaEntry").on("click", function(){ myFunction(); });

คุณสามารถใช้onเหตุการณ์ที่ผูกไว้"click"และตั้งค่าฟังก์ชันของคุณเป็นตัวจัดการ:

$("#bfCaptchaEntry").on("click", myFunction);

.บน()

แนบฟังก์ชันตัวจัดการเหตุการณ์สำหรับเหตุการณ์อย่างน้อยหนึ่งเหตุการณ์กับองค์ประกอบที่เลือก

http://api.jquery.com/on/


ง่ายและเข้าใจง่าย สิ่งที่ฉันต้องการ คำถามอื่น: วิธีที่ง่ายที่สุดในการรวมการเปลี่ยนสีพื้นหลังโดยใช้ jQuery คืออะไร? หรือจะดีกว่าถ้าใช้ 'style.backgroundColor = "white";' ในส่วนฟังก์ชัน?
Claudio Delgado

39

ลองใช้วิธีนี้หากคุณทราบชื่อไคลเอนต์ออบเจ็กต์ของคุณ (ไม่สำคัญว่าจะเป็นปุ่มหรือกล่องข้อความ)

$('#ButtonName').removeAttr('onclick');
$('#ButtonName').attr('onClick', 'FunctionName(this);');

ลองสิ่งนี้ถ้าคุณต้องการเพิ่มเหตุการณ์ onClick ไปยังวัตถุเซิร์ฟเวอร์ด้วย JQuery

$('#' + '<%= ButtonName.ClientID %>').removeAttr('onclick');
$('#' + '<%= ButtonName.ClientID %>').attr('onClick', 'FunctionName(this);');

ชุดนี้ตั้งค่าฟังก์ชันโดยไม่ต้องเรียกพร้อมกัน
Vassilis

ใช้ .attr นี้ OnClick แทนการคลิกโดยยังหมายถึงคุณโดยตรงสามารถกำหนดคำสั่งสคริปต์แทนการเรียกใช้ฟังก์ชันเช่นหรือ"history.go(0);" "alert('Hi!');"
Jonathan

2
นี่คือสิ่งที่ฉันต้องการอย่างแท้จริงเนื่องจากฉันต้องการให้สามารถกำหนดฟังก์ชันแยกต่างหากและสามารถตั้งค่าฟังก์ชันได้โดยไม่ต้องเรียกใช้ ขอบคุณ 4 ปีที่ผ่านมา
kevin walker

1
สิ่งที่ฉันชอบเกี่ยวกับคำตอบนี้คือมันไม่ได้เรียกใช้ฟังก์ชัน แต่ตั้งค่าเฉพาะ onclick
gdrt

18

ลองใช้แนวทางด้านล่าง

$('#bfCaptchaEntry').on('click', myfunction);

หรือในกรณีที่ jQuery ไม่ใช่สิ่งจำเป็นอย่างยิ่งให้ลองด้านล่าง

document.getElementById('bfCaptchaEntry').onclick = myfunction;

อย่างไรก็ตามวิธีการข้างต้นมีข้อบกพร่องเล็กน้อยเนื่องจากตั้ง onclick เป็นทรัพย์สินแทนที่จะลงทะเบียนเป็นตัวจัดการ ...

อ่านเพิ่มเติมในโพสต์นี้https://stackoverflow.com/a/6348597/297641


เมื่อคุณพูด 'แต่วิธีการดังกล่าว' มันจะไม่ชัดเจนถ้าคุณกำลังหมายเพียงแค่วิธีการ Javascript ธรรมดาหรือการจัดกลุ่มทั้งสองรุ่นเป็นหนึ่งในการเปรียบเทียบกับการใช้.onclick .clickฉันรู้ว่ามันเป็นอดีตเช่นเดียวกับที่.onลงทะเบียนตัวจัดการ แต่ต้องตรวจสอบที่อื่นเพื่อเรียนรู้สิ่งนั้น มันจะดีสำหรับผู้อ่านในอนาคตถ้าคำตอบของคุณชัดเจนมากขึ้น ... ;)
AntonChanning



0

หรือคุณสามารถใช้ฟังก์ชันลูกศรเพื่อกำหนด:

$(document).ready(() => {
  $('#bfCaptchaEntry').click(()=>{

  });
});

สำหรับการรองรับเบราว์เซอร์ที่ดีขึ้น:

$(document).ready(function() {
  $('#bfCaptchaEntry').click(()=>{

  });
});

1
ฉันไม่เห็นว่าสิ่งนี้ให้อะไรใหม่เนื่องจากคำตอบที่ยอมรับได้แนะนำ.click()วิธีการแล้ว ไม่ว่าจะใช้ฟังก์ชั่นลูกศรหรือฟังก์ชั่นปกติในความคิดของฉันการสนทนาที่ไม่เกี่ยวข้องกับคำถามที่ถาม และเพื่อการรองรับเบราว์เซอร์ที่ดีขึ้นคุณควรลบฟังก์ชั่นลูกศรทั้งสองไม่ใช่เฉพาะฟังก์ชันแรก
agrm

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