我的页面上有一个按钮,如下所示:
<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和值正在更新。但点击功能在更改后失败。
首次加载&#39;保存&#39;点击工作,因为按钮具有ID保存,更改后元素已获得ID&#39;更新&#39;但是没有触发更新点击。
我做错了什么?
由于
答案 0 :(得分: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?
答案 1 :(得分:2)
更改元素的id
并不是一个好主意,因为它们是静态的。
话虽这么说,在DOM加载时附加事件处理程序时,您的代码不起作用。因此,无论其id
如何,都会将相同的事件绑定到该元素。要实现所需,您需要使用委托事件处理程序,如下所示:
$(document).on('click', "#save", function() {
console.log('save');
}).on('click', "#update", function() {
console.log('update');
});
请注意,此处仅使用document
作为示例。在生产代码中,您应该使用在页面加载时DOM中可用的最接近的父元素。
答案 2 :(得分:1)
您正在更改元素的id id,您需要事件委托才能将事件附加到dynamicaaly添加的元素。
但是,不需要为切换按钮值创建不同的处理程序。您可以简单地获取值并提醒并根据它设置新值:
$("#save").click(function() {
var _this = $(this);
if(_this.val() == "save"){
alert('save');
_this.val('update');
}else{
alert('update');
_this.val('save');
}
});
答案 3 :(得分:1)
你必须阅读课程。 Jquery在页面加载时创建与对象的链接,并且无法使用新的id值引用对象。
$(".act").click(function() {
var idobject = $(this).attr("id");
alert($('#'+idobject).val());
});