2014-10-28 83 views
1

如果标题没有真正描述我的问题,我很抱歉。我仍然是新来的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并将其添加到所有内容中。

在此先感谢您的帮助!再一次,我仍然是新手,所以我意识到我可能错过了一些超级明显的东西。

+1

两件事。一个 - 'removeAttr'没有回调(http://api.jquery.com/removeattr/)。只需在下一行调用'.text()'(或链接调用)即可。其次,使用'.prop()'来改变禁用状态 – Ian 2014-10-28 21:41:41

回答

4

removeAttr()没有回调函数(http://api.jquery.com/removeAttr/)。你应该追加到文本(),因为你想将它应用到相同的元素。

$("#bartspbyu").removeAttr("disabled").text("Add"); 

jQuery允许你'方法链'的功能。 $("")构造函数会构造一个对象,因此您可以应用多个对象,如移除属性并更改文本。它的工作方式如同键入:

$("#bartspbyu").removeAttr("disabled") 
$("#bartspbyu").text("Add") 

优点是您实际上不需要重复自己。此外,因为removeAttr()没有回调函数(它只将属性的名称作为参数),所以它不会执行您传递的匿名函数,因为它不打算这样做。

+0

哇,太简单了!非常感谢。它正在工作。:) – SAULMARQ 2014-10-28 21:43:08

+0

我只知道它是“链接” - 从来没有想过它实际上来自哪里...... [“菊花链”](http://en.wikipedia.org/wiki/Daisy_chain_(electrical_engineering))。谢谢@somethinghere – Lix 2014-10-28 22:10:41

+1

@Lix:这就是这个:http://en.wikipedia.org/wiki/Method_chaining – 2014-10-28 22:14:13

3

我不认为removeAttr的第二个参数是回调。相反,只是把链接

$("#bartspbyu").removeAttr("disabled").text('Add'); 
1

我也建议摆脱JavaScript和只添加禁用代码的jQuery的是第一块您有内嵌的优势。

+0

它不是真的问题,但它是更好的做法,因为他已经实施了'.click()',这将是愚蠢的(: – somethinghere 2014-10-28 22:18:30

+0

我一定会这样做。谢谢你的提示! – SAULMARQ 2014-10-28 22:31:28