2010-11-15 35 views
6

Tôi muốn thiết lập sự kiện onBlur cho yếu tố nhập xác thực giá trị và, nếu không hợp lệ, "hủy bỏ" làm mờ và căn chỉnh đầu vào. Tuy nhiên trả về false từ onBlur không hủy trênBlur cách thức thực hiện với onClick. Có một giải pháp cho điều này (có thể sử dụng jQuery?)Hủy sự kiện onBlur trong JavaScript?

Trả lời

7

Tôi không biết bất kỳ cách nào đáng tin cậy của trình duyệt chéo để thực hiện việc này. Thường đặt thời gian chờ nhỏ trong sự kiện onblur và gọi số focus() khi bộ hẹn giờ kích hoạt.

Ví dụ:

document.getElementById('your_input_id').onblur = function() { 
    var self = this; 
    setTimeout(function() { self.focus(); }, 10); 
} 
+0

Làm cách nào để chuyển phần tử DOM tới trình xử lý thời gian chờ? setTimeout chỉ lấy một chuỗi mã, không phải là một đối tượng – JoelFan

+0

@JoelFan: Bạn có thể chuyển một hàm tới 'setTimeout', xem câu trả lời đã cập nhật của tôi. – casablanca

+1

Thực ra, 'setTimeout' có chức năng. 'setTimeout (function() {...}, 40);' – SLaks

4

Bạn có thể gọi focus() trong trình xử lý.
Điều này đôi khi sẽ giúp ích.

+0

dường như không hoạt động – JoelFan

2

Bạn có thể thực hiện điều này bằng cách sử dụng chức năng focus() jQuery trong một thời gian chờ zero-thứ hai. Dưới đây là ví dụ:

$('#my_input').bind('blur', function(event) { 
    var $input = $(this); 
    var is_input_valid = false; 

    // Code to determine if input is valid 
    // ... 

    if (!is_input_valid) { 
     setTimeout(function() { 
     $input.focus(); 
     }, 0); 
     return false; 
    } 

}); 
+0

hoạt động nhưng nhược điểm là nó chỉ hoạt động cho các phần tử có thẻ "id", và sau đó chỉ khi "id" đó được đảm bảo là duy nhất trên trang – JoelFan

+1

Điểm tốt. Nếu bạn cần phải sử dụng một cái gì đó khác với một ID, sau đó bạn có thể gán 'này' để' var tự' và sử dụng tự trong thời gian chờ đóng cửa gọi lại. – cpburnz

+0

Thời gian chờ "không an toàn" thứ hai mà bạn có thể sử dụng thực sự là khoảng 16ms. Điều này là do sự khác biệt về bộ tính giờ của JavaScript trên các thiết bị/trình duyệt khác nhau. Nếu bạn sử dụng 0 cho thời gian chờ không giây, bạn sẽ thấy rằng mã của bạn đồng bộ, đôi khi. – nhaarman

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