jQuery .focus(在字段 X 上)导致 .blur(在字段 X 上)被调用

标签 jquery focus blur

有谁知道为什么 jQuery .focus 函数会导致 onblur 事件被调用。我问这个问题的原因是因为在我的 JavaScript 自定义 psuedo 类中,我正在调用它。

jQuery(thisTemp.Elements.TxtSampleId).blur(Function.createDelegate(thisTemp,     
    thisTemp.PreAccessioningLoad));

但是在我对 WCF 服务的 AJAX 调用的成功 JavaScript 函数(在同一个类中)中,我有这段代码。 *.focus 行导致上面我的委托(delegate)的另一个实例被调用。我可以通过注释来证明这一点。通过这条线路,我的警报被调用了两次。如果没有它,我的警报只会被调用一次。

PreAccessioningLoadSuccess: function(quickDataEntryObject) {

    var val = jQuery(this.Elements.TxtSampleId).val().replace(/^\s\s*/, "").replace(/\s\s*$/, "");
    var intRegex = /^\d{1,10}$/;
    if (!intRegex.test(val)) {
        jQuery(this.Elements.SampleIdAjaxValidate).html("<span style='color:red'>Sample Id must contain between 1 and 10 digits</span>");
        jQuery(this.Elements.TxtSampleId).focus();
        jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
        alert("this alert gets called twice when .focus() function called ???");
        return false;
    }
    else {
        jQuery(this.Elements.SampleIdAjaxValidate).html("");  // clear AJAX validation
    }

...

为什么会发生这种情况?

============ 这是根据请求我的委托(delegate)事件:

PreAccessioningLoad: function(sender) {

    if (this.Elements.TxtSampleId.value != "") {

        var service = new Acu.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService();
        jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "visible");
        service.PreAccessioningLoad(this.Elements.TxtSampleId.value, Function.createDelegate(this, this.PreAccessioningLoadSuccess), Function.createDelegate(this, this.PreAccessioningLoadError));
    }
    return false;  //prevent page postback
},

============================================ 添加我的源代码:

<script type="text/javascript">

    function Change(obj, evt) {
        if (evt.type == "focus") {
            obj.style.borderColor = "black";
            obj.style.backgroundColor = "#90EE90";  // light green on focus
        }
        else if (evt.type == "blur") {
            obj.style.borderColor = "white";
            obj.style.backgroundColor = "#7AC5CD";  // light blue on blur
        }
    }

</script>

最佳答案

听起来问题是警报触发了模糊(因为它现在正在接收焦点):

alert("this alert gets called twice when .focus() function called ???");

参见:

http://jsfiddle.net/on50g7cr/2/

如果您点击“焦点”按钮,然后单击“单击我!”您会看到模糊事件被触发了两次(一次是因为“单击我”按钮失去焦点,另一次是因为警报窗口失去焦点)。

关于jQuery .focus(在字段 X 上)导致 .blur(在字段 X 上)被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6021456/

相关文章:

delphi - 如何从当前聚焦的组件中移除焦点?

css - <div> 使用 css 模糊部分背景图像

jquery - 跨子域共享点列表访问

javascript - 使用 Google Analytics 跟踪滑动

javascript - 帮我简化这个 jquery 代码

Java 焦点事件监听器

java - 使用箭头键控制连接到 TextField 的 JavaFX ContextMenu

Javascript - 删除 URL 参数或设置另一个值

image - 如何使用 ImageMagick 模糊/像素化图像的一部分,从而产生大像素?

javascript - 如何在 JQuery 中触发选择的事件(按键或模糊)