Chúng tôi gặp sự cố tương tự khi làm việc. những gì chúng tôi đã tìm ra vào cuối là sự kiện được tổ chức sẽ kích hoạt trước sự kiện mờ cho phép bạn đặt nội dung trước khi xác thực hoặc thậm chí hủy quá trình xác thực hoàn toàn bằng cờ.
séc fiddle này tôi đã sử dụng example- bạn http://jsfiddle.net/dL3K3/31/
$(function(){
var flag = true;
$('input').blur(function(){
if(!$(this).val() && flag){
alert("Grrr, It's empty");
}
});
$('button').mousedown(function(){
flag = false;
});
$('button').mouseup(function(){
flag = true;
$('input').val('content').focus();
});
});
-Edit-
Như @mclin đề nghị, bằng cách sử dụng sự kiện mousedown và preventDefault sẽ ngăn chặn hành vi mờ. Và bạn chỉ có thể rời khỏi sự kiện click ban đầu nguyên vẹn -
http://jsfiddle.net/dL3K3/364/
$(function(){
$('input').blur(function(){
if(!$(this).val()){
alert("Grrr, It's empty");
}
});
$('button').mousedown(function(e){
e.preventDefault();
});
$('button').click(function(){
$('input').val('content');
});
});
Giải pháp này có thể là một chút sạch hơn và tốt hơn cho hầu hết các trường hợp chỉ cần lưu ý rằng nếu bạn sử dụng nó bạn sẽ preventDefault và mờ của bất kỳ yếu tố nào khác mà tiêu điểm hiện đang ở nhưng đối với hầu hết các trường hợp sử dụng không phải là vấn đề.
Nguồn
2012-03-26 09:40:36
Câu hỏi của bạn không rõ ràng? vấn đề của bạn và giải pháp dự kiến là gì? –
Về cơ bản, một hành động của người dùng gây ra hai sự kiện kích hoạt theo thứ tự nhưng hành động của sự kiện thứ hai phụ thuộc vào sự kiện đầu tiên. Tôi đã xem xét việc sử dụng setTimeout để trì hoãn sự kiện đầu tiên, nhưng điều đó dường như không phải là một giải pháp lý tưởng. – Jake
Tôi đã hỏi câu hỏi này ở dạng khá chung vì tôi đã gặp phải vấn đề này một vài lần trong các trường hợp khác nhau. – Jake