Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用从单击另一个函数获得的id属性_Javascript_Jquery - Fatal编程技术网

Javascript 使用从单击另一个函数获得的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将尝试在本地范围内创建该变量。因此,在函数内外声明具有相同名称的变量将阻止函数访问外部变量 因此,您在函数外部

我试图使用一个按钮的id,我点击它得到的,但它不工作

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
    });