2011-06-23 26 views
7

Làm cách nào để kích hoạt sự kiện onclick trước sự kiện onblur nếu tôi hiện đang tập trung vào hộp văn bản trong jQuery?jQuery: Làm thế nào để bắn onclick đầu tiên trước khi onblur?

Đầu ra dự kiến: Kích hoạt sự kiện nhấp nút trước tiên trước sự kiện mờ trong hộp thư. Cảnh báo "mybtn onclick cảnh báo"

Demo:http://jsfiddle.net/Zk8Fg/

Code:

<input type="text" name="fname" id="fname" value="" /><br /> 
<input type="button" name="mybtn" id="mybtn" value="Click Me" /> 

<script language="javascript"> 
$(document).ready(function() { 
    myFunc(); 
}); 

function myFunc() { 
    $('#fname').focus().blur(function() { 
     alert('fname onblur alert'); 
    }); 

    $('#mybtn').click(function() { 
     alert('mybtn onclick alert'); 
    }); 
} 
</script> 

Cảm ơn :)

+0

Bạn đang cố gắng làm gì với '$ .focus(). Blur()'? – Sampson

+1

Tôi có thể hỏi tại sao và/hoặc những gì bạn đang cố gắng làm? có lẽ ai đó sẽ có thể đề xuất một số lựa chọn thay thế? Sự kiện giao diện người dùng xảy ra là một thứ tự nhất định và tôi không nghĩ rằng nó có thể thay đổi. –

+0

@ Jonathan: Tôi có một xác nhận về sự kiện mờ hiện đang tập trung vào hộp văn bản nhưng kịch bản mờ là một khi tôi nhấp vào nút sau đó sự kiện mờ cháy đầu tiên hơn sự kiện nhấp chuột. – marknt15

Trả lời

3

Nếu trường đầu vào là tập trung hiện nay, bạn không thể tập trung vào việc khác yếu tố mà không làm mờ tiêu điểm hiện tại của bạn. Bất cứ điều gì bạn đang cố gắng làm, có lẽ là một cách tốt hơn.

Logging Visible sự kiện: http://jsfiddle.net/Zk8Fg/3/

+0

Vì vậy, điều đó là không thể? Có thể có một giải pháp cho điều này? Cảm ơn – marknt15

+3

@ marknt15 Không thể làm lệch chuỗi sự kiện chuẩn, nhưng điều đó không có nghĩa là không thể đạt được những gì bạn đang cố gắng làm. Hãy cho chúng tôi biết những gì bạn muốn đạt được, chúng tôi sẽ cố gắng hết mình để giúp đỡ. – Sampson

6

Vâng nó có thể là một phần của tiêu chuẩn mà cháy sự kiện đầu tiên, do đó bạn có lẽ không nên được thay đổi thứ tự. Những gì bạn có thể làm là trì hoãn hành động kết quả bằng cách sử dụng window.setTimeout với một sự chậm trễ ngắn.

$('#fname').focus().blur(function() { 
    window.setTimeout(function(){alert('fname onblur alert')},0.1); 
}); 

Tôi đồng ý với các ý kiến ​​khác, mặc dù nó thực sự trông giống như bạn nên suy nghĩ lại về cách bạn đang đi về việc này vì sắp xếp lại các sự kiện mặc định đập vào mắt tôi như một hack què mà có lẽ có giải pháp thanh lịch hơn.

+0

Cảm ơn bạn @SpliFF. Đây là câu trả lời hay nhất. :) –

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