如何强制JavaScript中发生模糊事件?

如何强制JavaScript中发生模糊事件?,javascript,jquery,Javascript,Jquery,这是我想做的。我想在每次select元素更改时触发一个事件。我有一个多行选择,当我进行更改(单击元素)时,它不会更改,直到选择框失去焦点。所以我试图在每次点击选择框时强制模糊。这样,如果它发生更改,它将触发更改的事件。如果它不改变,什么也不会发生 我该怎么做?我这样做对吗?Jquery答案也可以。您可以将onclick处理程序附加到select和各个选项。基本上是onclick=“this.blur();”。我总是发现在元素上单击事件是一件痛苦的事情,因为在您预期的时间点上什么都不会发生。使用j

这是我想做的。我想在每次select元素更改时触发一个事件。我有一个多行选择,当我进行更改(单击元素)时,它不会更改,直到选择框失去焦点。所以我试图在每次点击选择框时强制模糊。这样,如果它发生更改,它将触发更改的事件。如果它不改变,什么也不会发生


我该怎么做?我这样做对吗?Jquery答案也可以。

您可以将onclick处理程序附加到select和各个选项。基本上是
onclick=“this.blur();”
。我总是发现在
元素上单击事件是一件痛苦的事情,因为在您预期的时间点上什么都不会发生。

使用jQuery可以:

$('#mySelectBox').change(function() {
   //do things here
});
根据处的文档,当用户进行选择时,会立即触发该事件


查看此演示以验证其是否有效:

除了Ender之外,完整的代码可能是这样的

$('#mySelectBox').change(function() {
    $('#thingToBlur').blur();
})

参考资料:

好的,下面是发生的事情。我包括了JQuery的-vsdoc版本,而不是实际的JQuery库。这也解决了我在使用blockUI等插件时遇到的一些问题。

这将找到具有焦点的元素并触发模糊事件

function blur(){
    document.querySelectorAll('input,textarea').forEach(function(element){
        if(element === document.activeElement) {
            return element.blur();
        }
    });
}

如果你这样做,你会激怒那些使用键盘浏览“选择列表”选项的人。@Roatin,这要看情况而定。如果他在更改标签类,没什么大不了的,如果他在抛出警报…;)对这是OP应该监听的事件。这可能不会发生在IE中。IE在
change
事件中是出了名的糟糕。我提供的演示在我看来似乎在IES6-8中工作。此外,从提供的文档中可以看出:“从jQuery1.4开始,更改事件现在在InternetExplorer中冒泡,并且与所有其他浏览器的工作方式相同。”这就是我的想法。最令人沮丧的是,当我将代码复制并粘贴到那个演示站点时,它会按预期工作。但当我在应用程序中运行它时,它不会。也许这与微软的AJAX库有关。我或多或少继承了这段代码,因此引用了大量未使用的javascript库。请尝试使用jQuery.noConflict(),然后(为了方便起见)将您的jQuery包装在以下内容中:(函数($){/$()将用作此函数}内jQuery()的别名)(jQuery);我不能保证这会解决您的问题,但这不会有什么坏处。为了澄清,您不希望包含-vsdoc。这应仅用于intellisense。