停止由于按键触发模糊事件

当检测到事件’keydown’时,也会自动触发事件’blur’。 如果触发’keydown’事件,如何防止元素上的’blur’事件? 这是jsFiddle和代码:HTML:

CSS:

 #ctrl { width:100px; height:50x; border:1px solid black; display:inline-block; } 

JavaScript的:

 function saveOrDelete() { $("#ctrl").attr('contentEditable', false); alert('Triggered'); // alerts 2 times } $("#delegatee").on('keydown blur', '#ctrl', saveOrDelete) 

请注意,此解决方案不起作用:

 function saveOrDelete() { $("#delegatee").off('keydown blur', '#ctrl', saveOrDelete) $("#ctrl").attr('contentEditable', false); alert('Trigger'); $("#delegatee").on('keydown blur', '#ctrl', saveOrDelete) } 

此行导致此行为:

$("#ctrl").attr('contentEditable', false);

一旦跨度不再是contentEditable ,它将失去焦点,因此blur被提升。

你将不得不重新思考你的逻辑。

编辑(评论后):

为了捕获由于上述原因而紧跟在keydownblur ,您可以更改逻辑以首先检查范围是否可编辑,然后根据该操作采取操作。

例如

 var mode = $("#ctrl").prop('contentEditable'); if (mode == 'true') { $("#ctrl").prop('contentEditable', false); // your other processes here } else { return false; } 

检查小提琴上的更新: http//jsfiddle.net/CxFaq/1/