คำตอบแต่ละข้อหายไปบางจุดดังนั้นนี่เป็นวิธีแก้ปัญหาของฉัน:
$("#input").on("input", function(e) {
var input = $(this);
var val = input.val();
if (input.data("lastval") != val) {
input.data("lastval", val);
//your change action goes here
console.log(val);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
<p>Try to drag the letters and copy paste</p>
Input Event
ไฟบนแป้นพิมพ์ป้อนข้อมูลเมาส์ลาก , ป้อนอัตโนมัติและคัดลอกวางทดสอบบน Chrome และ Firefox การตรวจสอบค่าก่อนหน้าทำให้ตรวจพบการเปลี่ยนแปลงจริงซึ่งหมายความว่าจะไม่ยิงเมื่อวางสิ่งเดียวกันหรือพิมพ์อักขระเดียวกันหรืออื่น ๆ
ตัวอย่างการทำงาน: http://jsfiddle.net/g6pcp/473/
อัปเดต:
และหากคุณต้องการเรียกใช้change function
เฉพาะเมื่อผู้ใช้พิมพ์เสร็จแล้วและป้องกันไม่ให้ดำเนินการเปลี่ยนแปลงหลายครั้งคุณสามารถลองทำสิ่งนี้:
var timerid;
$("#input").on("input", function(e) {
var value = $(this).val();
if ($(this).data("lastval") != value) {
$(this).data("lastval", value);
clearTimeout(timerid);
timerid = setTimeout(function() {
//your change action goes here
console.log(value);
}, 500);
};
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
หากผู้ใช้เริ่มพิมพ์ (เช่น "foobar") รหัสนี้จะป้องกันไม่ให้คุณchange action
เรียกใช้สำหรับผู้ใช้ตัวอักษรทุกประเภทและจะทำงานเฉพาะเมื่อผู้ใช้หยุดพิมพ์สิ่งนี้เป็นสิ่งที่ดีเป็นพิเศษเมื่อคุณส่งอินพุตไปยังเซิร์ฟเวอร์ (เช่นอินพุตการค้นหา) ทางเซิร์ฟเวอร์ทำการค้นหาเพียงครั้งเดียวfoobar
และไม่ใช่การค้นหาหกครั้งf
แล้วfo
จึงfoo
และfoob
ต่อ ๆ ไปเรื่อย ๆ