2016-08-05 59 views
3

我有我的網頁上的按鈕,這樣做:在我有一對夫婦的點擊功能的頁面更改按鈕ID和價值,使點擊()事件失敗

<input type='button' class='act' id='save' value='save'/> 

例如:

$("#save").click(function() { 
    alert ('save'); 
}) 

$("#update").click(function() { 
    alert ('update'); 
}) 

在頁面的其他地方使用下面的jquery我正在改變按鈕的值和id。

$(".act").attr("id", "save").attr("value", "save"); 

OR

$(".act").attr("id", "update").attr("value", "update"); 

看我可以看到的按鈕ID和值被更新的元素。但是點擊功能在更改後失敗。

第一次加載時,「保存」點擊工作,因爲按鈕具有ID保存,更改後元素獲得ID'更新',但未觸發更新點擊。

我在做什麼錯?

感謝

回答

2

更改元素的id並不像他們註定是靜態的一個偉大的想法。

這就是說,您的代碼不起作用,因爲您在加載DOM時附加事件處理程序。因此,相同的事件綁定到元素,而不管它的id。爲了達到你需要使用委派的事件處理程序,這樣你需要什麼:

$(document).on('click', "#save", function() { 
    console.log('save'); 
}).on('click', "#update", function() { 
    console.log('update'); 
}); 

注意document這裏純粹是作爲一個例子。在生產代碼中,您應該使用頁面加載時DOM中可用的最接近的父元素。

+0

感謝這可以解釋爲什麼它不工作。現在排序:) – MacMan

+0

沒問題,很樂意幫忙 –

1

您正在更改元素的ID ID,您需要將事件附加到動態添加元素的事件委託。

但是,沒有必要爲切換按鈕的值創建不同的處理程序。您可以簡單地獲得該值並提醒並設置新的值:

$("#save").click(function() { 
var _this = $(this); 
if(_this.val() == "save"){ 
    alert('save'); 
    _this.val('update'); 
}else{ 
    alert('update'); 
    _this.val('save'); 
    } 
}); 
1

您必須閱讀課程。 Jquery在頁面加載時創建與對象的鏈接,並且不能使用新的id值引用對象。

$(".act").click(function() { 
     var idobject = $(this).attr("id"); 
     alert($('#'+idobject).val()); 
    }); 
4

試試這個

$("#btn1").click(function() { 
window.alert("im changing id to btn2 and ho ho ho"); 
$("#btn1").val("ho ho ho"); 
$("#btn1").attr("id", "btn2"); 

$("#btn2").unbind("click").click(function() { 
    window.alert("im changing id to btn1 and hey hey"); 
    $("#btn2").val("hey hey"); 
    $("#btn2").attr("id", "btn1");  
}); 
}); 

或委託方法

$("#btn1").parent().on("click","#btn1", function() { 
    window.alert("im changing id to btn2 and ho ho ho"); 
    $("#btn1").val("ho ho ho"); 
    $("#btn1").attr("id", "btn2"); 
}) 
.on("click","#btn2",function() { 
    window.alert("im changing id to btn1 and hey hey"); 
    $("#btn2").val("hey hey"); 
    $("#btn2").attr("id", "btn1");  
}); 

How to change the attr and id of a button after clicking? using jquery?