jQuery $(this) 如何在事件委托方法中使用?
How is jQuery $(this) used inside event delegation method?
我正在尝试自己编写这个 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);
})
您在showError()
中引用的this
指的是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);
});
根据您的 html 的结构,通过在调用中使用 $(this)
可以变得更加简单:
$("input").on("blur", function() {
if($(this).val() === ""){
$(this).next().html("Please enter something!");
}else {
$(this).next().html("");
}
});
您应该尝试将 $(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));
});
你可以在调用 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 演示中工作 link
要正常使用这个,可以用.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
对象。
JSFiddle
我正在尝试自己编写这个 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);
})
您在showError()
中引用的this
指的是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);
});
根据您的 html 的结构,通过在调用中使用 $(this)
可以变得更加简单:
$("input").on("blur", function() {
if($(this).val() === ""){
$(this).next().html("Please enter something!");
}else {
$(this).next().html("");
}
});
您应该尝试将 $(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));
});
你可以在调用 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 演示中工作 link
要正常使用这个,可以用.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
对象。