在加载文档时为元素指定一个id,以便在单击时可以执行不同的功能?

时间:2012-05-24 14:09:28

标签: javascript jquery

我正在尝试操纵id以使用相同的按钮执行更多2次操作。

类似于:

var id;
if(something == 2){
   id = "id";
}else{
   id = "id2";
}

$(".myClass").attr("id", id);

但是,它不好,因为如果我尝试使用我设置的id,将无法工作,可能是因为该文档已经加载了按钮中没有id

不要认为这需要一个例子,but i made it

有另一种方法可以做到这一点吗?

7 个答案:

答案 0 :(得分:3)

如果你需要将动作绑定到某些 future 元素,通常最好使用委托,这意味着要监听不在元素本身上的事件,而是在他们的祖先之一上:

$("body").on("click", "#id2", function(){
    alert( "Clicked!" );
});

此时,您可以动态设置ID:

$(".myClass").attr("id", function(){
    return something === 2
        ? "id" 
        : "id2" ;
});

当我正在侦听身体上的点击事件时,通常最好使用更接近的父元素,这样事件在处理之前不必冒泡太多。

答案 1 :(得分:1)

使用此:

$(document).on('click', '#alertMe', function(){
   alert('Working'); 
});

答案 2 :(得分:0)

试试这个

$("#alertMe").live("click",function(){
   alert('Working'); 
});

答案 3 :(得分:0)

不要使用'click()'绑定处理程序,使用live:

$("#alertMe").live('click', function(){
   alert('Working'); 
});

答案 4 :(得分:0)

原因是click方法是一次性交易。它在运行时将click事件添加到该id。要动态处理该ID上的点击事件,请使用on,如下所示:

$(".button1").click(function(){
    $(".button2").attr("id", "alertMe");
});

$(document).on('click',"#alertMe", function(){
   alert('Working');
});

实例:http://jsfiddle.net/SWZMd/17/

答案 5 :(得分:0)

您也可以在设置ID后设置点击次数:

$(".button1").click(function(){
    $(".button2").attr("id", "alertMe");
    $("#alertMe").click(function(){
      alert('Working'); 
    });

});

答案 6 :(得分:0)

将第二个单击事件移动到第一个单击事件中,然后它将起作用。

$(".button1").click(function(){
   $(".button2").attr("id", "alertMe");
   $("#alertMe").click(function(){
   alert('Working'); 
   });
});

http://jsfiddle.net/dcai/SWZMd/18/