ben*_*nto 8 javascript events event-handling
在我的最新代码中,我focus在textarea上有一个事件处理程序.当用户单击textarea时,将触发该事件处理程序,该处理程序根据所选的textarea设置一些其他DOM状态.但是,在我的程序的其他地方,我想以编程方式设置focustextarea而不触发该事件处理程序.我知道Backbone有一种silently执行动作的方法.
我唯一的伪解决方案是暂时设置一个变量:
var silence = true;
Run Code Online (Sandbox Code Playgroud)
然后,在我的事件处理程序中,只有在静默为假时才执行逻辑.处理程序仍然被触发,但逻辑不会运行.
还有其他人知道更好的策略吗?
您可以unbind()像这样临时地进行活动:
在以下情况下,您需要处理焦点事件:
function focus_handler() {
//focus handler code
...
...
}
$('#yourelement').bind('focus', focus_handler);
Run Code Online (Sandbox Code Playgroud)
现在,在代码部分中,您希望以编程方式聚焦元素而不触发事件处理程序:
$('#yourelement').unbind('focus');
$('#yourelement').focus();
$('#yourelement').bind('focus', focus_handler);
Run Code Online (Sandbox Code Playgroud)
<input type="text" name="input" id="input" value="0">
<input type="text" name="input" id="input2" value="0">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script>
$(function() {
$('#input').focus(function(a,b) {
if (b) alert('forced');
});
$('#input').trigger('focus', jQuery.Event("focus"));
});
</script>
Run Code Online (Sandbox Code Playgroud)
当b事件处理程序的参数存在时,通过调用 来触发事件$('#input').trigger('focus', jQuery.Event("focus"));。因此,您可以使处理程序函数根据正常焦点或强制焦点执行。