如何使用click事件传递变量

时间:2013-06-05 20:28:19

标签: javascript variables scope

我是一个“自我学习的朋友”,所以在这里提出一些基本问题。我现在理解变量范围,但不清楚为什么它在这里使用.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





})

5 个答案:

答案 0 :(得分:0)

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

function alertTextChange(e/*the event*/){
    gsd = $(this).text();
    alert("this is from the click function" + gsd);
}
$p.click(alertTextChange);

答案 1 :(得分:0)

除了重新声明变量gsd之外,只有在单击其中一个p标记后才会设置它。并且因为警报在您点击之前发生,所以它不会设置gsd。

我刚刚添加了

alert(gsd);
点击事件中的

Fiddle

答案 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。这个是回调函数的本地。删除vargsd将再次引用具有该名称的全局变量。