Javascript 使用从单击另一个函数获得的id属性
我试图使用一个按钮的id,我点击它得到的,但它不工作Javascript 使用从单击另一个函数获得的id属性,javascript,jquery,Javascript,Jquery,我试图使用一个按钮的id,我点击它得到的,但它不工作 var idClicked; $("input").click(function(e){ var idClicked = $(this).attr('id'); }); $(idClicked).on('click',function(e){ ... }); 有什么建议吗?当您将var关键字放在变量名之前时,JS将尝试在本地范围内创建该变量。因此,在函数内外声明具有相同名称的变量将阻止函数访问外部变量 因此,您在函数外部
var idClicked;
$("input").click(function(e){
var idClicked = $(this).attr('id');
});
$(idClicked).on('click',function(e){
...
});
有什么建议吗?当您将
var
关键字放在变量名之前时,JS将尝试在本地范围内创建该变量。因此,在函数内外声明具有相同名称的变量将阻止函数访问外部变量
因此,您在函数外部声明的idClicked
变量不会从函数内部更新
正确的结构应该是:
var idClicked;
$("input").click(function(e){
idClicked = $(this).attr('id');
});
此外,变量idClicked
仅在您在输入
上单击m时分配一个值。因此,使用idClicked
应该仅在第一次单击完成后进行
也许您可以将第二个事件代码放入第一个事件代码中。这也将解决您的可变范围问题
$("input").click(function(e){
var idClicked = $(this).attr('id');
$('#' + idClicked).on('click',function(e){
...
});
});
您还可以使用target来获取id,而不是该关键字
var idClicked;
$("input").click(function(e){
idClicked = e.target.id;
});
if(idClicked!=undefined ){
$("#"+idClicked).on('click',function(e){
...
});
}
您的代码将无法工作,因为您声明了事件,并在同一元素中通过id再次声明了另一个事件,并且每次单击都将导致运行的双事件处理程序。。。他们只是一次又一次地声明事件,但永远不会执行您的逻辑代码 另一件重要的事情是,不能有两个元素具有相同的id属性 您需要做的是放置两个具有不同id的元素
<input type="text" id="myid">
<button id="button_myid">my button</button>
此结构将允许您在其他元素上触发单击事件
此代码的基础是捕获输入上的click事件,并触发按钮上的事件,该按钮的ID名称包含输入的ID(前缀为“按钮\”)
但请注意,在每个按钮上,您都需要声明相关事件。为什么要重新声明
idClicked
?尝试在“#”+idClicked前面添加一个散列如果您正确获得了控件的id,那么在id$(“#”+idClicked)之前添加#。on('click',函数(e){…});但是为什么……?即使忽略变量声明的问题,$(idClicked).on('click',…)
部分也会在页面加载时,在用户单击之前立即运行。解决此问题的一种方法是在第一个单击处理程序中执行此操作(并且根据您的要求,解除与以前单击的项目关联的任何以前的单击处理程序的绑定)。变量范围是一个问题,但现在不是$(未定义)。在('click'…)
上,这将给出$(“#未定义”)。在('click'…)
-在用户单击之前使用idClicked
。您能告诉代码$中输入了什么吗(“input”)。单击(函数(e){?如果您没有定义,那么您就不能在代码中获取该元素,输入类名?或div name?或者什么?我的观点是$(“#”+…
部分会在用户单击任何内容之前立即运行,因此此时idClicked
的值为未定义的。如果它在页面加载中,则在之前添加一个条件以进行值检查。更新的codeVariable范围是一个问题,但代码的下一部分(未在您的答案中显示)仍然是$(未定义)。打开('单击'…)
,因为它在赋值之前运行。
$("input").click(function(e){
var id = $(this).attr('id');
var buttonId = "button_" + id;
$("#"+buttonId).trigger("click");
});
$("#button_myid").click(function(e) {
// do stuff
});