การตรวจจับการเปลี่ยนแปลงค่าของอินพุต [type = text] ใน jQuery


159

ฉันต้องการเรียกใช้ฟังก์ชั่นทุกครั้งที่มีการเปลี่ยนแปลงค่าของกล่องอินพุตที่ระบุ มันเกือบจะทำงานได้$('input').keyup(function)แต่ไม่มีอะไรเกิดขึ้นเมื่อวางข้อความลงในกล่องเช่น $input.change(function)ทริกเกอร์เฉพาะเมื่อการป้อนข้อมูลเบลอดังนั้นฉันจะรู้ได้อย่างไรเมื่อใดก็ตามที่กล่องข้อความเปลี่ยนค่า?


2
ดังนั้นทำไมไม่มีการผูกทั้งสองkeyupและpasteเหตุการณ์?
Ilia G

devcurry.com/2009/07/… - การตรวจจับเหตุการณ์การตัด / คัดลอก / วาง
BeRecursive

2
@ liho1eye pasteเป็นเพียงหนึ่งที่ฉันคิดว่าฉันควรฟังการเปลี่ยนแปลงที่ชัดเจนกว่าที่จะคิดเส้นทางที่แตกต่างกันทั้งหมด
Jeriko

@ Jeriko นั่นเป็นเพียงสองวิธีที่มูลค่าสามารถเปลี่ยนแปลงได้ (ข้างการปรับปรุงที่ชัดเจนผ่านทางรหัส js)
Ilia G

คุณยังต้องการที่จะจับ Ctlr-X ( cut)
Alexis Wilke

คำตอบ:


343

เพียงจำว่า 'เปิด' ได้รับการแนะนำผ่านฟังก์ชั่น 'ผูก' ดังนั้นให้ลองใช้ฟังเหตุการณ์แบบนี้เสมอ:

$("#myTextBox").on("change paste keyup", function() {
   alert($(this).val()); 
});

ทำไมpasteถึงเป็นเช่นนั้น CTRL+Vแรกผมคิดว่ามันไม่ทำงานเท่านั้นถ้าเราวางสิ่งที่มี
Black

3
@ NicolasS.Xu: การกำหนดค่าโดยตรงไม่ทำให้เกิดเหตุการณ์ใด ๆ กับ DOM
Alejandro Silva

จะดียิ่งขึ้นถ้าใช้แทนconsole.log() alertจะเป็นที่น่ารำคาญมากสำหรับ keyup alertไป
cytsunny

4
@cytsunny ใช่แน่นอนว่าการแจ้งเตือนนั้นน่ารำคาญ แต่ในกรณีนี้เป็นตัวอย่างของรหัสที่จะดำเนินการเกี่ยวกับการเปลี่ยนแปลงค่ามันสามารถเป็นเพย์โหลดใด ๆ ที่คุณต้องการได้จริงๆ
Alejandro Silva

1
หากคุณคลิกขวาและวางสิ่งนี้จะคืนค่าอินพุตก่อนที่จะวาง
alstr

104

ลักษณะ

คุณสามารถทำได้โดยใช้.bind()วิธีการของ jQuery ตรวจสอบjsFiddle

ตัวอย่าง

html

<input id="myTextBox" type="text"/>

jQuery

$("#myTextBox").bind("change paste keyup", function() {
   alert($(this).val()); 
});

ข้อมูลมากกว่านี้


15

ลองทำเช่นนี้ .. ให้เครดิตกับhttps://stackoverflow.com/users/1169519/teemu

สำหรับตอบคำถามของฉันที่นี่: /programming/24651811/jquery-keyup-doesnt-work-with-keycode-filtering?noredirect=1#comment38213480_24651811

วิธีแก้ปัญหานี้ช่วยให้ฉันก้าวหน้าโครงการของฉัน

$("#your_textbox").on("input propertychange",function(){

   // Do your thing here.
});

หมายเหตุ: การแลกเปลี่ยนคุณสมบัติสำหรับ IE เวอร์ชันที่ต่ำกว่า


6

คุณยังสามารถใช้กิจกรรมกล่องข้อความ -

<input id="txt1" type="text" onchange="SetDefault($(this).val());" onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">

function SetDefault(Text){
  alert(Text);
}

ลองสิ่งนี้


5

ลองสิ่งนี้:

โดยทั่วไปเพียงบัญชีสำหรับแต่ละเหตุการณ์:

Html:

<input id = "textbox" type = "text">

jquery:

$("#textbox").keyup(function() { 
    alert($(this).val());  
}); 

$("#textbox").change(function() { 
alert($(this).val());  
}); 



0

ใช้สิ่งนี้: https://github.com/gilamran/JQuery-Plugin-AnyChange

มันจัดการทุกวิธีในการเปลี่ยนอินพุตรวมถึงเมนูเนื้อหา (การใช้เมาส์)


คุณใช้มันอย่างไร ฉันรวมไว้ใน HTML ของฉันและใช้ $ ("อินพุต") anyChange (ฟังก์ชั่น (e) {console.log (e);}); แต่มันไม่เคยไปถึง console.log line
Ofer Gal

0

การรวมกันของกิจกรรมนี้เหมาะกับฉัน:

$("#myTextBox").on("input paste", function() {
   alert($(this).val()); 
});

0

อย่าลืมcutหรือselectเหตุการณ์!

คำตอบที่ยอมรับนั้นเกือบจะสมบูรณ์แบบ แต่ก็ลืมเรื่องcutและselectเหตุการณ์ไปได้

cut จะทำงานเมื่อผู้ใช้ตัดข้อความ (CTRL + X หรือคลิกขวา)

select จะทำงานเมื่อผู้ใช้เลือกตัวเลือกที่แนะนำสำหรับเบราว์เซอร์

คุณควรเพิ่มพวกเขาด้วยเช่น:

$("#myTextBox").on("change paste keyup cut select", function() {
   //Do your function 
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.