jquery - 在不触发模糊事件的情况下取消焦点元素或同时阻止焦点

标签 jquery click focus blur

我有几个输入元素,它们的行为类似于下拉元素,其方式与 jquery 日期事件 ui 的工作方式类似。由于应用程序的性质,这需要保持这种方式。我已将元素设置为不可编辑。这将允许应用程序在其下方构建一个带有选项列表的伪下拉菜单,同时防止用户直接操作它。单击其中一个后,jQuery 插件会将值分配给该输入。

问题是有一个验证检查器被触发 onblur 所以看起来验证器过早地验证,当然它工作正常。我不想重写验证器插件。

有没有办法防止焦点或模糊事件在特定的点击事件中同时发生?

这是一个应对挑战的 js fiddle

http://jsfiddle.net/powerphillg5/YHgKQ/

这是那里的代码,因为我们在提供链接 #law-abidingcitizen 时必须在此处提供代码:

<input type="text" id="my_input" value="Click me." />
<script>
$('#my_input').blur(function(){
    alert("Prevent me without removing the blur() and function that caused me!");
});

$("#my_input").click(function(){
    $(this).after("<ul>\
                  <li data-value='value1' class='click_me'>Now, click me,</li>\
                  <li data-value='value1' class='click_me'>or me!</li>\
                   </uL>");

    $(".click_me").click(function(){
        $("#my_input").val($(this).data("value"));
        $(this).parent().remove();
        $("#my_input").after("<img src='http://harrisongreetingcards.net/images/1316_thank_you_for_your_time_note_card.png' />");
    })

}); 
</script>

最佳答案

我认为您想要做的只是从该事件中取消模糊处理程序的绑定(bind),因此在添加处理程序后添加以下内容:

// Add this after the handlers you want to prevent are added
$('#my_input').unbind('blur');   

或者,如果您无法取消绑定(bind)处理程序(因为尚未添加处理程序),则根据添加内容的位置,您可以添加自己的处理程序,以防止任何其他以后添加的处理程序关闭:

// Add this before the handlers you want to prevent are added
$("#my_input").blur(function(event) {
   event.stopImmediatePropagation();
});

请注意,这可能会对整体功能产生影响,因为您基本上已经阻止了这些事件的发生(并且某些事件可能依赖于它们)。因此,您可能希望在某个时刻重新绑定(bind)功能并伪造事件,或者只是调用特定的函数。

编辑:再次阅读您的问题后。模糊事件发生在单击事件之前,因此您不能仅从单击事件内部将其关闭。因此,如果您希望模糊事件在其他情况下发生(例如,当您开箱即用时),您需要做一些更聪明的事情。在这种情况下,您想要编写自己的模糊处理程序来决定要做什么,或者您可能需要添加一些其他处理程序来故意强制模糊事件 - 也许是当不同的字段获得焦点时。

我不了解您的应用程序,因此很难知道您需要什么,但希望这可以帮助您使其正常工作。

关于jquery - 在不触发模糊事件的情况下取消焦点元素或同时阻止焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18198051/

相关文章:

javascript - 如何使用 jQuery UI 中的 Draggable 和 Droppable 将拖动的 li 附加到可放置的 ui 中?

jquery - .click() 在 Safari 中不起作用

jquery - 将焦点切换到单击以动态添加文本输入

macos - 如何在没有子类化的情况下绘制 cocoa 聚焦环?

javascript - vis.js 重绘和改变数据

jQuery 没有修改 CSS

javascript - 迭代 json 并找到特定的键

javascript - 带有类的单击函数仅适用于当前选择

jquery - 使用 .click(function(){ 更改 DIV 背景颜色

jquery 不(或删除)专注于任何表单字段