繁体   English   中英

在Safari中,使用jQuery在显示警报后,表单输入文本字段不会获得焦点。 为什么?

[英]In Safari, using jQuery a Form Input Text Field does not receive focus after alert is displayed. Why?

我有一个ASPX Web表单。 我使用jQuery来简化我的Javascript。 我使用Javascript验证脚本来验证每个表单字段的值。 如果发生错误,我会弹出一条错误消息警报。 然后,我将焦点转移到基础元素上。

这是我尝试过的示例。

使用jQuery:

var Form_FieldDef = function(name) {
    this.name = name;
    this.SetFocus = function() {
        $('#' + this.name)[0].focus();
    }
    this.Validate = function() {
        var isvalid = true;
        if ( $.trim($('#' + this.name).val()) == '') {
            alert("Your entry is empty");
            this.SetFocus();
            isvalid = false;
        }
        return isvalid;
    }
}

这适用于IE7,IE8,Opera,Chrome和Firefox。 它不适用于PC上的Safari 4。 我没有Mac。

因此,我将SetFocus方法更改为此。

this.SetFocus = function() {
    var fld = document.getElementById(this.name);
    if (fld != null)
        fld.focus();
}

这适用于IE7,IE8,Opera,Chrome和Firefox。 它不适用于PC上的Safari 4。

我使用VS 2008调试器逐步执行了代码,并在基础元素上调用了focus方法。

这是一种直觉:尝试在超时例程中更改焦点:

this.setFocus = function() {
  var self = this;
  setTimeout(function() {
    $(self).focus();
  }, 1);
};

我的直觉:您在匿名函数中使用'this'可能是引用它出现在其中的任何匿名函数,从而使'this'的使用变得模棱两可。 也许此轻微修改的行为会有所不同(未经测试):

var Form_FieldDef = function(name) {
    var parentRef = this;
    this.name = name;
    this.Validate = function() {
        var isvalid = true;
        var elem = $('#' + parentRef.name);
        if ($.trim(elem.val()) == '') {
            alert("Your entry is empty");
            elem.focus();
            isvalid = false;
        }
        return isvalid;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM