我试图让自己这个小的jQuery代码测试用户是否输入了什么。如果他们没有,请提醒他们错误。但是,我似乎遇到了一个小问题,在这种情况下,关键字$(this)
似乎没有表现出应有的效果。请帮忙!
HTML:
<input type="text" id="name" name="name" />
<div id="error-div-1"></div>
<input type="text" id="hobbies" name="hobbies" />
<div id="error-div-2"></div>
JavaScript的:
function showError(i) {
var errorDivID = "#error-div-" + i;
if ($(this).val() === "") {
$(errorDivID).html("Please enter something!");
} else {
$(errorDivID).html("");
}
}
$("#name").on("blur", function() {
showError(1);
});
$("#hobbies").on("blur", function() {
showError(2);
})
答案 0 :(得分:2)
您在this
中引用的showError()
是指window
个对象;因为该函数在全局范围内而不在事件处理程序范围内。
将其传递给下面的函数,
function showError(i, element) {
var errorDivID = "#error-div-" + i;
if ($(element).val() === "") {
$(errorDivID).html("Please enter something!");
} else {
$(errorDivID).html("");
}
}
$("#name").on("blur", function () {
showError(1, this);
});
答案 1 :(得分:0)
根据您的html结构,通过在调用中使用$(this)
可以更加简单:
$("input").on("blur", function() {
if($(this).val() === ""){
$(this).next().html("Please enter something!");
}else {
$(this).next().html("");
}
});
答案 2 :(得分:0)
您应该尝试将 $(this)传递给该函数。在该代码中,th $(this)的值现在是回调而不再是元素。
function showError(i, elem) {
var errorDivID = "#error-div-" + i;
if (elem.val() === "") {
$(errorDivID).html("Please enter something!");
} else {
$(errorDivID).html("");
}
}
$("#name").on("blur", function() {
showError(1, $(this));
});
$("#hobbies").on("blur", function() {
showError(2, $(this));
});
答案 3 :(得分:0)
您可以在调用showError方法
时传递this
<script>
function showError(i, element) {
var errorDivID = "#error-div-" + i;
if ($(element).val() === "") {
$(errorDivID).html("Please enter something!");
} else {
$(errorDivID).html("");
}
}
$("#name").on("blur", function() {
showError(1, this);
});
$("#hobbies").on("blur", function() {
showError(2, this);
})
</script>
或者您可以在showError中更改逻辑,如下所示
<script>
function showError() {
if ($(this).val() === "") {
$(this).next('div').html("Please enter something!");
} else {
$(this).next('div').html("");
}
}
$("#name").on("blur", showError);
$("#hobbies").on("blur", showError);
</script>
您可以像下面这样对逻辑进行编码 -
$("#name, #hobbies").on("blur", function(){
if($(this).val()==""){
$(this).next('div').html("Please enter something!");
} else {
$(this).next('div').html("");
}
});
<强> JSFiddle Demo 强>
注意: - 请取消注释相关的代码段以使用JSFiddle演示链接
答案 4 :(得分:0)
要正常使用此功能,您可以使用.call()
来“修改”功能的范围
function showError(i) {
var errorDivID = "#error-div-" + i;
if ($(this).val() === "") {
$(errorDivID).html("Please enter something!");
} else {
$(errorDivID).html("");
}
}
$("#name").on("blur", function() {
showError.call(this, 1);
});
$("#hobbies").on("blur", function() {
showError.call(this, 2);
});
这使您的功能代码保持不变。
.call()
允许您修改函数的范围。简单来说,它允许您修改函数中的this
。 this
未被传递的原因是因为函数可以拥有它自己的私有变量,因此调用函数的函数也是如此,这会导致问题。为避免这种情况,函数不会与调用它们的函数共享范围。使用.call()
,我们设置this
对象。