2012-09-10 25 views
6

Xem jsfiddle này:jQuery MouseUp không bắn sau khi kéo ra khỏi liên kết

http://jsfiddle.net/CB87X/6/

Bấm và giữ nút, kéo ra khỏi nút và phát hành. Như bạn có thể thấy, sự kiện mouseup không bao giờ kích hoạt nếu con chuột không nằm trên phần tử khi nút chuột được nhả ra. Do đó, kiểu dáng trong ví dụ của tôi không bao giờ thay đổi về bản gốc. Làm thế nào để bạn kích hoạt sự kiện mouseup nếu nút chuột được nhả ra khi không nằm trên phần tử được nhấp?

Chỉnh sửa1: BTW Tôi đã xem xét một số giải pháp trên trang web này, triển khai chúng và sự kiện di chuột vẫn không kích hoạt.

+2

Lưu ý rằng đây cũng là hành vi mặc định của các nút thông thường, ít nhất là trong chrome. [Demo] (http://jsfiddle.net/QxZCB/) –

+1

như [theo cách này] (http://jsfiddle.net/CB87X/7/) – Sender

Trả lời

9

Sự kiện mouseup liên quan đến vị trí của con trỏ và hành vi được mong đợi này. Nếu bạn muốn nút của mình được tạo kiểu đúng cách, hãy liên kết sự kiện mouseleave.

+0

Bởi "cũng" tôi giả định rằng bạn có thể liên kết hai sự kiện với một bộ chọn? Nếu có, bạn có thể chỉ cho tôi cách thực hiện không? Tôi chỉ cần thêm một chức năng riêng biệt? – preahkumpii

+5

Thêm sự kiện được phân tách bằng 'khoảng trắng'. '$ (". nhưng "). bind (" mouseup mouseleave ", function() {...}' – alexbusu

+0

+1 để cung cấp khả năng mở hộp này cho giun * (của việc phải quản lý con chuột và chuột lại -entry nếu chỉ đơn thuần là giảm hiệu ứng trong khi nút được tổ chức là không đủ) * Cảm ơn, mặc dù. :-) – HostileFork

2

Forked dụ bạn để cung cấp một ví dụ làm việc:

http://jsfiddle.net/67Rrs/2/

Khi nút là mousedown ed, một sự kiện được ràng buộc với tiếp theo mouseup, bất cứ nơi nào nó xảy ra, mà reset phong cách.

2

Điều này cần thực hiện thủ thuật. Nếu bạn nhấp chuột trái vào nút (.but) và kéo ra, bạn có thể mouseup ở bất kỳ đâu trên trang và vẫn kích hoạt sự kiện nhấp chuột. Nếu bạn mouseleave trang 'nội dung' và mouseup, sự kiện bind ed mouseleaveunbind ed.

$('.but').mousedown(function(e) { 
    if (e.which == 1) { 
     var $this = $(this); 
     $this.bind('mouseleave', function(){ 
      $('body').one('mouseup', function() { 
       $this.click(); 
      }); 
     }); 
     $this.mouseup(function() { 
      $(this).unbind('mouseleave'); 
     }); 
    } 
}); 
Các vấn đề liên quan