$(this)在一个函数里面?

时间:2014-10-28 21:38:19

标签: javascript jquery

如果标题没有真正描述我的问题,我会提前道歉。我还是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>

提前感谢您的帮助!再说一遍,我还是新手,所以我意识到我可能错过了一些非常明显的东西。

3 个答案:

答案 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块中。