我有一个ASPX网页表单。我使用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调试器逐步完成代码,并且我在底层元素上调用焦点方法。
答案 0 :(得分:0)
这是预感:尝试在超时例程中更改焦点:
this.setFocus = function() {
var self = this;
setTimeout(function() {
$(self).focus();
}, 1);
};
答案 1 :(得分:0)
我自己的预感:你可能在匿名函数中使用'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;
}
}