2013-08-20 37 views
5

TỔNG QUAN:kiện onchange không cháy, khi giá trị được thay đổi trong onkeyup kiện

Tôi đang viết một plugin jquery mà chuyển đổi một textbox vào một hộp nhập thời gian. Có nghĩa là nó cho phép người dùng nhập thời gian theo định dạng HH: MM. Một phần của quá trình này là chèn dấu hai chấm (:) vào đúng vị trí. Trên keyup tôi kiểm tra nếu người dùng đã gõ 2 số và nếu như vậy nối thêm một dấu hai chấm vào giá trị đã nhập.

VẤN ĐỀ:

Cách tiếp cận này hoạt động tốt trừ khi ai đó áp dụng các plugin trên textbox mà còn muốn có một phong tục onchange handler.This onchange handler không cháy khi mã cập nhật các giá trị textbox lập trình cũng không hiện nó cháy khi hộp văn bản mất tập trung.

TÔI HIỂU BIẾT:

Tôi đoán đây, vì vậy hãy sửa lại cho tôi nếu tôi sai.

  • lẽ hộp văn bản có nội "_value"(nhấn để phân biệt từ các thuộc tính giá trị công cộng) lĩnh vực mà giữ giá trị trong hộp văn bản trước khi chỉnh sửa bắt đầu. Khi tiêu điểm rời khỏi hộp thư, công cụ JS sẽ kiểm tra nếu giá trị hiện tại của hộp văn bản khớp với "_value" của hộp văn bản.Nếu chúng khác nhau, sự kiện onchange được kích hoạt.
  • Có thể thay đổi giá trị bằng cách sử dụng tổ hợp phím thông thường không sửa đổi "_value" chỉ là giá trị, do đó, onchange bị kích hoạt. Nhưng có lẽ thay đổi giá trị được thực hiện qua JS sửa đổi cả hai giá trị và "_value" và để sự kiện thay đổi không kích hoạt?

cách giải quyết:

Các mờ sự kiện cháy vì nó không có gì để có giá trị. Vì vậy, tôi rõ ràng có thể kích hoạt sự kiện thay đổi từ sự kiện mờ. Nhưng tôi không muốn làm điều này vì nó là một hack và phá vỡ ngữ nghĩa của mờ và thay đổi.

LIÊN KẾT CÓ LIÊN QUAN:

Tôi tìm thấy một số liên kết trên SO với cùng một câu hỏi nhưng không có câu trả lời (IMHO) đưa ra một giải pháp thanh lịch hoặc chính xác. đây là một số trong những người tôi thấy:

ĐƠN GIẢN Mã sản phẩm:

$(document).ready(function() { 
    $("input").keyup(function() { 
     this.value = '*' + this.value; 
     // this changes the value, but does not fire the onchange event 
     // and it also does not fire it when the textbox loses focus. 
     // blur fires though. 
    }); 
    $("input").change(function() { 
     alert('in change'); 
    }); 

    $("input").blur(function() { 
     alert('in blur'); 
    }); 
}); 

Fiddle:

http://jsfiddle.net/sajjansarkar/vHgst/4/

trình duyệt thử nghiệm: IE8,10 và Chrome. trình trong FireFox (!!) (+1 Felix Kling)

+0

Đó là sự kiện thay đổi không cháy, nếu bạn thiết lập 'ele.value 'là hành vi thông thường. FYI, cả hai, 'blur' là một sự kiện' thay đổi' được kích hoạt trong Firefox sau khi dữ liệu đầu vào bị mất tập trung. –

+0

@FelixKling Nếu đó là hành vi thông thường làm thế nào tôi có thể giữ lại hành vi onchange? Và quan sát thú vị rằng nó hoạt động trong FF, sẽ chỉnh sửa câu hỏi –

Trả lời

1

Bạn có thể kích hoạt sự kiện lập trình với jquery.trigger: http://jsfiddle.net/vHgst/5/

$(this).trigger('change'); 
+0

Có, nhưng khi nào tôi gọi nó để bắt chước sự kiện thay đổi chính xác? Ví dụ của bạn sẽ gọi là trao đổi cho mọi khóa –

Các vấn đề liên quan