Phát hiện thay đổi giá trị của đầu vào [type = text] trong jQuery


159

Tôi muốn thực thi một chức năng mỗi khi giá trị của một hộp đầu vào cụ thể thay đổi. Nó gần như hoạt động với $('input').keyup(function), nhưng không có gì xảy ra khi dán văn bản vào hộp, ví dụ. $input.change(function)chỉ kích hoạt khi đầu vào bị mờ, vậy làm thế nào để tôi biết ngay lập tức mỗi khi hộp văn bản thay đổi giá trị?


2
Vậy tại sao không ràng buộc cả hai keyuppastesự kiện?
Ilia G

devcurry.com/2009/07/ từ - Phát hiện các sự kiện cắt / sao chép / dán
BeRecursive

2
@ liho1eye pastechỉ là một thứ mà tôi nghĩ đến, tôi thà lắng nghe một sự thay đổi dứt khoát hơn là phải nghĩ về tất cả các con đường đến khác nhau.
Jeriko

@Jeriko Đó là hai cách duy nhất có thể thay đổi giá trị (bên cạnh việc cập nhật rõ ràng thông qua mã js).
Ilia G

Bạn cũng muốn chụp Ctlr-X ( cut).
Alexis Wilke

Câu trả lời:


340

chỉ cần nhắc lại rằng 'bật' được giới thiệu qua chức năng 'liên kết', vì vậy hãy luôn cố gắng sử dụng trình nghe sự kiện như thế này:

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

Tại sao pastemặc dù? Đầu tiên tôi nghĩ rằng nó chỉ hoạt động nếu chúng ta dán một cái gì đó với CTRL+V.
Đen

3
@ NicolasS.Xu: sự sắp xếp trực tiếp các giá trị không kích hoạt bất kỳ sự kiện DOM nào
Alejandro Silva

Sẽ còn tốt hơn nếu sử dụng console.log()thay vì alert. Sẽ rất khó chịu cho keyup đến alert.
cytsunny

4
@cytsunny yea chắc chắn, cảnh báo gây phiền nhiễu, nhưng trong trường hợp này là một ví dụ về mã được thực thi khi thay đổi giá trị, nó thực sự có thể là bất kỳ tải trọng nào bạn muốn.
Alejandro Silva

1
Nếu bạn nhấp chuột phải và dán, điều này sẽ trả về giá trị của đầu vào trước khi dán.
vào

104

Sự miêu tả

Bạn có thể làm điều này bằng .bind()phương pháp của jQuery . Kiểm tra jsFiddle .

Mẫu vật

Html

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

jQuery

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

Thêm thông tin


15

Hãy thử điều này .. tín dụng vào https://stackoverflow.com/users/1169519/teemu

để trả lời câu hỏi của tôi ở đây: /programming/24651811/jquery-keyup-doesnt-work-with-keycode-filtering?noredirect=1#comment38213480_24651811

Giải pháp này đã giúp tôi tiến bộ trong dự án của mình.

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

   // Do your thing here.
});

Lưu ý: trao đổi thuộc tính cho các phiên bản thấp hơn của IE.


6

bạn cũng có thể sử dụng các sự kiện trong hộp văn bản -

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

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

Thử cái này


5

Thử cái này:

Về cơ bản, chỉ cần tài khoản cho mỗi sự kiện:

Html:

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

Câu hỏi:

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

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

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

chọn cho đề xuất trình duyệt


2

Thử cái này:

$("input").bind({
            paste : function(){
                $('#eventresult').text('paste behaviour detected!');
            }
})

0

Sử dụng cái này: https://github.com/gilamran/JQuery-Plugin-AnyChange

Nó xử lý tất cả các cách để thay đổi đầu vào, bao gồm menu nội dung (Sử dụng chuột)


Làm thế nào để bạn sử dụng nó? Tôi đưa nó vào HTML của mình và sử dụng $ ("input"). AnyChange (function (e) {console.log (e);}); Nhưng nó không bao giờ đến dòng console.log
Ofer Gal

0

Sự kết hợp các sự kiện này đã làm việc cho tôi:

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

0

ĐỪNG QUÊN cut hoặc selectSỰ KIỆN!

Câu trả lời được chấp nhận là gần như hoàn hảo, nhưng nó quên về cutselectcác sự kiện.

cut được kích hoạt khi người dùng cắt văn bản (CTRL + X hoặc nhấp chuột phải)

select được kích hoạt khi người dùng chọn tùy chọn do trình duyệt đề xuất

Bạn cũng nên thêm chúng, như vậy:

$("#myTextBox").on("change paste keyup cut select", function() {
   //Do your function 
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.