我是一个“自我学习的朋友”,所以在这里提出一些基本问题。我现在理解变量范围,但不清楚为什么它在这里使用.each方法而不是点击。我想要做的就是单击一个元素并在click函数之外的其他地方使用它的value / text / attribute。
$(document).ready(function() {
abc = "";
gsd = "";
$("p").each(function() {
if($(this).text() === "5") {
abc = $(this).text();
alert(abc);
}
})
$("p").on("click", function() {
var gsd = $(this).text();
//alert("this is abc: " + abc);
})
alert("this is from the each function" + abc);// this works
alert("this is from the click function" + gsd); // this doesn't
})
答案 0 :(得分:0)
我不确定这里到底发生了什么,但看起来第二个代码在点击事件被点击之前触发了点击事件。我建议的可能是创建另一个函数,然后在click事件函数中调用它:
function alertTextChange(e/*the event*/){
gsd = $(this).text();
alert("this is from the click function" + gsd);
}
$p.click(alertTextChange);
答案 1 :(得分:0)
答案 2 :(得分:0)
最初,您在范围之外有gsd
,但是在函数内部,您将使用var
重新声明变量。声明变量后,要分配值,只需引用变量名称,不需要使用var
作为前缀。一个简单的例子:
var x;
function doStuff(y) {
x = y; //x is now set to the value of y, it's already declared above, no need for: var
console.log(x);
}
答案 3 :(得分:0)
一些事情:
1)您需要在函数顶部使用“var”声明变量,而不是在click事件中稍后重用“var”:
var abc = "";
var gsd = "";
2)您的点击功能无法提供点击的“P”元素。一种方法是改变您设置事件的方式并将其报告给函数:
HTML:<p id="pElem1" onclick="clickMe(this.id)">Click Me</p>
jQuery的:
function clickMe(p){
alert('This is from the P element' + p);
}
答案 4 :(得分:0)
.each()
的行为类似于常规for
循环。它遵循程序的流程。另一方面,.on('click')
事件处理程序附加到事件。触发事件时,回调将仅被称为 。它只是因为你附上它而不会发射。
这里令人困惑的位可能是使用回调函数。虽然两个代码示例都使用回调,但它们的使用方式不同。您可以将第一个视为常规for
循环,其中每次迭代都会调用该回调。每当触发事件时,都会调用第二个函数,这可能是在其余代码运行之后。
这里的另一个问题是范围。在回调函数中,您在回调函数的范围内重新定义gsd
:
var gsd = $(this).text();
此gsd
不是全球gsd
。这个是回调函数的本地。删除var
,gsd
将再次引用具有该名称的全局变量。