使用 this 关键字遍历 jquery 选择器
Using the this keyword to itterate through a jquery Selector
所以我有一个 jQuery 代码,它在单击按钮时记录我页面上每个输入字段的值:
我已经在输入上用 forEach 方法尝试过这个方法,但它说它不是一个函数,为什么我不能在这里使用这个方法?
$("#submit").click(e => {
e.preventDefault();
let inputs = $("input");
inputs.each(() => {
console.log($(this).val());
});
});
但是这里的问题是这里的this关键字指的是#submit
,我这里只用this关键字怎么能达到我的目的,为什么会这样这里指的是 #submit
而不是 input
?
提前致谢。
这是一种可能的解决方案;
// should always to assign vars first and then use them
var $this = $(this);
var $submit = $("#submit");
$submit.click(e => {
e.preventDefault();
let inputs = $("input");
inputs.each(function() {
console.log($(this).val());
});
});
不要使用箭头函数。他们不会重新绑定 this
。
相反,使用封闭词法范围的 this
。
$("#submit").click(e => {
e.preventDefault();
let inputs = $("input");
inputs.each(function(){
console.log($(this).val());
});
});
应该可以正常工作。
有关箭头函数和 this
行为的更多信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
试试这个:
function getInputs(){
let inputs = $("input");
inputs.forEach(() => {
console.log($(this).val());
});
}
$("#submit").click(e => {
e.preventDefault();
getInputs()
});
这会将输入放在一个单独的函数中,防止 this
变量被覆盖。
所以我有一个 jQuery 代码,它在单击按钮时记录我页面上每个输入字段的值:
我已经在输入上用 forEach 方法尝试过这个方法,但它说它不是一个函数,为什么我不能在这里使用这个方法?
$("#submit").click(e => {
e.preventDefault();
let inputs = $("input");
inputs.each(() => {
console.log($(this).val());
});
});
但是这里的问题是这里的this关键字指的是#submit
,我这里只用this关键字怎么能达到我的目的,为什么会这样这里指的是 #submit
而不是 input
?
提前致谢。
这是一种可能的解决方案;
// should always to assign vars first and then use them
var $this = $(this);
var $submit = $("#submit");
$submit.click(e => {
e.preventDefault();
let inputs = $("input");
inputs.each(function() {
console.log($(this).val());
});
});
不要使用箭头函数。他们不会重新绑定 this
。
相反,使用封闭词法范围的 this
。
$("#submit").click(e => {
e.preventDefault();
let inputs = $("input");
inputs.each(function(){
console.log($(this).val());
});
});
应该可以正常工作。
有关箭头函数和 this
行为的更多信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
试试这个:
function getInputs(){
let inputs = $("input");
inputs.forEach(() => {
console.log($(this).val());
});
}
$("#submit").click(e => {
e.preventDefault();
getInputs()
});
这会将输入放在一个单独的函数中,防止 this
变量被覆盖。