2012-05-24 41 views
2

我試圖操縱一個id使用相同的按鈕來做更多的2個動作。加載文檔時爲元素指定一個id,以便在單擊時可以執行不同的功能?

它是這樣的:

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

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

,但其並不好,因爲如果我嘗試使用我設置的id,將無法正常工作,可能是因爲該文件已經被裝入在沒有id按鈕。

不認爲這需要一個例子,but i made it

有另一種方法來做到這一點?

+0

更改ID的作品,但你正試圖將事件處理程序綁定** **前元素具有的ID。 jQuery只能找到具有特定ID的元素(如果存在)。在更改ID或使用事件委派時綁定處理程序。 –

+0

使用谷歌瀏覽器的控制檯來查找錯誤 – PitaJ

回答

3

如果您需要將動作綁定到一些未來的元素,通常最好使用委派,意味着t Ø監聽不是元素本身的事,但是在他們的祖先之一:

$("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'); 
}); 
0

嘗試這樣

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

'.live'自jQuery 1.7以來已被棄用。 –

+1

@Felix Kling你是對的... – hkutluay

0

不要使用 '點擊()' 的處理程序綁定,使用現場:

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

原因是click方法是一次性處理。它將點擊事件添加到該ID在它運行的位置。要動態處理點擊該ID使用on這樣的事件:

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

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

活生生的例子:http://jsfiddle.net/SWZMd/17/

0

您還可以設置點擊你設定的ID後:

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

}); 
+1

不認爲這是一個好主意 –

+0

上面的代碼是OP張貼到jsfiddle的代碼。我只是做了一個改變,所以它可以回答他的問題。 http://jsfiddle.net/lucuma/xKg4m/1/ – lucuma

+0

此外,我個人使用數據屬性,如數據ID,但這不是什麼OP要求。 – lucuma

0

移動第二次點擊事件放入第一個點擊事件中,那麼它將起作用。

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

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

相關問題