2012-04-17 41 views
2

我知道已經有很多關於這個概念的文章,但我的問題有一點點不同。我應該怎樣稱呼我的javascript。 href,點擊或綁定點擊事件?

在我的頁面上,我有一個鏈接:

<a id="mylink">click me </a> 

然後我改變動態使用的href:它發生了,我必須多次調用上面的代碼,以便

$get('mylink').href = 'javascript:doSomething(id);'; 

我用javascript代碼用不同的id參數調用相同的函數來覆蓋href屬性的當前值。

以上是我現在用了很長時間。但是當我試圖實現OnNavigateAway以在用戶關閉瀏覽器窗口時發出警告時,混亂開始了。當用戶點擊具有href屬性值的錨時,IE也會觸發onNavigateAway事件。

於是我開始用jQuery的click事件來替換那些HREF的:

​​

但請記住,這個代碼可以被多次調用,所以我必須先解除click事件,然後再次綁定:

function completed(result) { 
$("#mylink").unbind('click'); 
    $("#mylink").click(function (e) { 
    doSomething(result.id); 
    e.preventDefault(); 
    }); 
} 

這是處理我的JavaScript的好方法嗎?或者,這是否具有約束力,解除束縛不合適?

另一種方法可以使用javascript手動覆蓋onclick屬性。

你將如何處理?

我期待着您的回覆。

回答

4

我會在這裏使用不同的邏輯。相反,重新分配的單擊事件,我將只是改變一些數據屬性,然後在「全局」點擊事件中使用該屬性:當您需要更改id有這樣的代碼

$("#mylink").on("click", function (e) { 
    doSomething($(this).data("id")); 
    e.preventDefault(); 
}); 

然後:

$("#mylink").data("id", id); 

這種方式重複調用來改變數據只會導致最後影響例如

$("#mylink").data("id", 5); 
$("#mylink").data("id", 6); 
$("#mylink").data("id", 7); 

點擊後,7將被傳遞給函數。

Live test case

如果該元素是動態創建的,並假設你正在使用jQuery 1.7或以上,你可以使用.on趕上即使是動態創建的元素:

$("body").on("click", "#mylink", function (e) { 
    doSomething($(this).data("id")); 
    e.preventDefault(); 
}); 
+0

我得到你的意思,但我應該怎麼檢查如果點擊事件已被綁定?如果沒有,像你一樣綁定點擊事件? – ThdK 2012-04-17 11:01:41

+0

@ThdK包裝在$(document).ready(function(){...})內''你應該沒有問題 - 除非鏈接以某種方式動態創建? – 2012-04-17 11:15:24

+0

它是動態創建的。我已經更新了一下我的問題,所以你看到有一個函數被傳遞給響應參數。響應是一個包含id屬性的對象。 – ThdK 2012-04-17 11:20:46

相關問題