Tôi có một trang với một danh sách chọn (ASP.NET MVC Page)Html Select List: tại sao onchange lại được gọi hai lần?
Các chọn danh sách và onchange kiện quy định như thế này:
<%=Html.DropDownList("CompanyID", Model.CompanySelectList, "(select company)", new { @class = "data-entry-field", @onchange = "companySelectListChanged()" })%>
Chức năng companySelectListChanged là nhận được gọi là hai lần?
Tôi đang sử dụng mã tiện lợi trong số this question để nhận người gọi.
cả lần so với người gọi là sự kiện onchange, tuy nhiên nếu tôi nhìn vào những người gọi người gọi sử dụng:
arguments.callee.caller.caller
cuộc gọi đầu tiên trả về một số mã hệ thống như người gọi (tôi đoán) và trở về cuộc gọi thứ hai không xác định .
Tôi đang kiểm tra không xác định để chỉ phản ứng một lần để trao đổi, nhưng điều này dường như không lý tưởng, whcy sẽ onchange được gọi là hai lần?
UPDATE:
ok, tìm ra thủ phạm! ... ngoài tôi :-) nhưng vấn đề gọi công tySelectListChanged chức năng hai lần vẫn đứng.
Sự kiện trao đổi được đặt trực tiếp trên lựa chọn như đã đề cập. Điều này gọi hàm companySelectListChanged.
.. chú ý lớp 'data-entry-field', bây giờ trong tệp javascript được liên kết riêng biệt, sự kiện thay đổi trên tất cả các trường có lớp này được liên kết với chức năng thay đổi màu của nút lưu. Điều này có nghĩa là có hai sự kiện trên onchange, nhưng công tySelectListChanged được gọi hai lần?
Các thêm ràng buộc được thiết lập như sau:.
$ ('dữ liệu nhập cảnh trường ') bind (' bấm phím thay đổi KeyUp', function (e) {highLightSaveButtons();});
Giả sử có thể có 2 sự kiện thay đổi trong danh sách lựa chọn, giả định rằng cài đặt bấm phím & có thể làm hỏng sự kiện?
Bất kỳ ý tưởng nào?
KHÁC UPDATE:
Các yếu tố lựa chọn có vẻ tốt đẹp và tất cả các công trình nếu tôi loại bỏ các thêm 'thay đổi' ràng buộc. khi liên kết 'thay đổi' được thêm vào, sự kiện đó sẽ kích hoạt một lần và 'onchange' có dây được kích hoạt hai lần.
Nếu cả hai sự kiện bị ràng buộc thông qua jQuery, tất cả các công trình đều ok, có vẻ như không thể trộn lẫn các sự kiện thay đổi liên kết onchange và jquery có dây cứng? Tôi đoán điều này trả lời câu hỏi của tôi nhưng có vẻ như một vấn đề với IE và ràng buộc các sự kiện này với jquery.
Bạn có thể tách sự cố thành một ứng dụng đơn giản mà bạn có thể đăng toàn bộ mã của bộ điều khiển và chế độ xem không? –
Bạn có mã nào khác sử dụng cách tiếp cận khác để gắn trình xử lý sự kiện vào phần tử không? Những gì bạn mô tả các âm thanh như hàm được đăng ký như một trình xử lý sự kiện * hai lần * - một lần trong cài đặt trực tiếp của thuộc tính 'onclick' và một lần qua một số cơ chế khác (ví dụ,' attachEvent() 'hoặc thông qua một khung như Prototype hoặc jQuery). – Pointy
Sự kiện onchange bị ràng buộc trực tiếp vào danh sách chọn như đã đề cập, hàm companySelectListChanged() gọi hai hàm khác tạo các bài viết jquery ajax. không có mã nào khác ràng buộc sự kiện onchange. –