[英]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.