0

我是一个“自学爱好者”,所以在这里问一些基本问题。我现在了解变量作用域,但不清楚为什么它在这里使用 .each 方法而不是点击。我想要做的就是点击一个元素并在点击功能之外的其他地方使用它的值/文本/属性。

$(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





})
4

5 回答 5

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);
}
于 2013-06-05T20:44:46.510 回答
0

我不确定这里到底发生了什么,但看起来第二个代码在点击事件被点击事件的人触发之前被命中。我推荐的可能是创建另一个函数,然后在 click 事件函数中调用它:

function alertTextChange(e/*the event*/){
    gsd = $(this).text();
    alert("this is from the click function" + gsd);
}
$p.click(alertTextChange);
于 2013-06-05T20:35:31.733 回答
0

几件事:

1)您需要在函数顶部使用“var”声明变量,而不是稍后在单击事件中重用“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);
}
于 2013-06-05T20:46:12.070 回答
0

.each()行为类似于常规for循环。它遵循程序的流程。.on('click')另一方面,事件处理程序附加到事件。只有在触发事件时才会调用回调。它不会因为您附加它而触发。

这里令人困惑的一点可能是回调函数的使用。虽然两个代码示例都使用回调,但它们的使用方式不同。您可以将第一个视为常规for循环,其中每次迭代都会调用该回调。每当触发事件时,都会调用第二个函数,这可能是在其余代码运行之后。

这里的另一个问题是范围。gsd在回调函数中,你在回调函数的范围内重新定义:

var gsd = $(this).text();

gsd不是全局的gsd。这是回调函数的本地。删除varandgsd将再次引用具有该名称的全局变量。

于 2013-06-05T20:48:50.030 回答
0

除了重新声明您的变量 gsd 之外,它仅在您单击其中一个 p 标记时才被设置。并且由于警报在您单击之前发生,因此它不会设置 gsd。

我刚刚添加

alert(gsd);

在点击事件中。

小提琴

于 2013-06-05T20:39:06.300 回答