我正在寻找这个问题的快速解决方案:
function remove() {
var clickedbtn;
$("button[role=remove]").click(function() {
clickedbtn = this.id;
alert(clickedbtn); // works, assigns correct value
});
alert(clickedbtn); // undefined -- why?
}
单击的变量用var声明并分配了一个值,但该值在click()函数之外不是持久的。任何帮助表示赞赏。
答案 0 :(得分:1)
当您尝试在外部函数中使用该变量时,click()
尚未运行,因为用户尚未单击。
您无法预测未来的价值。
与该问题分开,您的变量名称不匹配。 (clicked
不是clickedbtn
)
答案 1 :(得分:0)
您永远不会分配值toclicked!
所以
function remove() {
var clicked;
$("button[role=remove]").click(function() {
clickedbtn = this.id;
alert(clickedbtn);
clicked = true; // or if you want clicked set to the id of the button then clicked = this.id;
});
alert(clicked);
}
答案 2 :(得分:0)
此问题与作用域无关 - 它与运行代码时的有关。异步代码是异步的,这个问题与incorrectly assigning a variable in an AJAX call相同。
请使用以下代码(我已将更改的分配更正为不存在的" clickedbtn"变量),表示何时将根据注释中的数字运行
# 1
var clicked = "initial value";
# 2
$("button[role=remove]").click(function() {
# At some point -AFTER- 3
clicked = this.id;
alert(clicked);
});
# 3
alert(clicked);
这是因为点击回调仅在用户点击按钮后显示为(读取:"将来的某个时刻").click
功能添加回调处理程序立即返回 以及以下代码显示警报立即执行 发生之前已为变量分配了ID可以在将来点击的元素。