如果标题没有真正描述我的问题,我会提前道歉。我还是javascript / jquery的新手,这就是我理解这个问题的方法......
我正在使用一个按钮来调用一个将元素附加到我的网页的功能。
<button id="bartspbyu" class="btn btn-xs btn-success add-alert" onClick="this.disabled = 'disabled';">Add</button>
正如您所看到的,当它被点击时,它会自动禁用。它还使用脚本将文本从“添加”更改为“已添加”:
$('.add-alert').on('click', function() {
$('#added-alert').fadeIn('slow');
setTimeout(function() {
$('#added-alert').fadeOut('slow');
}, 2000);
$(this).text('Added');
});
用户可以选择删除他们添加的元素。当他们删除元素时,使用以下脚本再次启用该按钮:
//Reactive Add Button
$(document).on("click", ".drartspbyu", function (){
$("#bartspbyu").removeAttr("disabled");
});
这很好用,但我试图让它将按钮中的文本更改回“添加”。我做了以下事情:
//Reactive Add Button
$(document).on("click", ".drartspbyu", function (){
$("#bartspbyu").removeAttr("disabled", function (){
$(this).text('Add');
});
});
它再次启用按钮,但它不是在编辑文本。我不确定我是否错误地设置了$(this)
,或者整个事情是否错误。
我意识到我可以做$("#bartspbyu").text('Add');
之类的事情,但我使用$(this)
的原因是因为有数百个这样的添加按钮,我不想花费数小时编辑每个个人ID(#bartspbyu只是400多个中的一个)。如果我能找到一种方法让它从它提到的第一个实例中读取#bartspbyu,那将节省我的工作时间,因为我只需要进行Find + Replace并将这些额外的代码行添加到所有内容中。 / p>
提前感谢您的帮助!再说一遍,我还是新手,所以我意识到我可能错过了一些非常明显的东西。
答案 0 :(得分:4)
removeAttr()
没有回调函数(http://api.jquery.com/removeAttr/)。您应该只追加text(),因为您想将它应用于同一个元素。
$("#bartspbyu").removeAttr("disabled").text("Add");
jQuery允许您使用'方法链'功能。 $("")
构造函数构造一个对象,您可以因此应用多个内容,例如删除属性然后更改文本。它的工作方式就像你输入:
$("#bartspbyu").removeAttr("disabled")
$("#bartspbyu").text("Add")
优点是您实际上不需要重复自己。此外,因为removeAttr()
没有回调函数(它只将属性的名称作为参数),所以它不会执行您传递的匿名函数,因为它不打算这样做。
答案 1 :(得分:3)
我不认为removeAttr的第二个参数是回调。相反,只需利用链接
$("#bartspbyu").removeAttr("disabled").text('Add');
答案 2 :(得分:1)
我还建议删除内联javascript,然后将禁用代码添加到你拥有的第一个jquery块中。