1

我有这个 HTML5 代码(例如):

  <form id="peopleFormView">
     <input type="checkbox" name="name1" value="5" />
     <input type="checkbox" name="name3" value="2" />
     <input type="checkbox" name="name4" value="3" />
  </form>

  <table id="domain5">
     <tbody></tbody>
  </table>

这段代码是用 JS 处理的:

 $(function(){
   registerPerformersClickHandler();
 });

 function registerPerformersClickHandler(){

   $('#peopleFormView input').click(function(){
     var IdPerson = $(this).val();

     if ($('#performer'+IdPerson).length == 0){
         performer.add(IdPerson);
     }
     else{
         performer.del(IdPerson);
     }

 });

 var performer = {
     del: function(IdPerson){
       $('#performer'+IdPerson).remove();
    }
 }

识别元素存在 $('#performer'+IdPerson).length == 0 工作正常,但是当添加元素时

  <tr id="performer5">
    <td>Surname name</td>
  </tr>

然后我再次单击相同的输入,JS 正确调用了 performer.del(),但什么也没发生,没有错误,没有反应。如果我像这样调用 remove 两次:

var performer = {

 add: function(IdPerson){
    var requestData = {
        className : 'Performer',
        method : 'getPerformerRowView',
        params : IdPerson
    };

    $.post(openAjaxLoader, requestData)
       .success(function(data){
          orchestraDomain.addPerformerToDomain(data.IdDomain, data.performer);
       })
       .error(function(data){
          window.alert(data.error);
       })
 }
 ,
 del: function(IdPerson){
    alert( $('[id=performer'+IdPerson+']').length ); 
    $('#performer'+IdPerson).remove();
    $('#performer'+IdPerson).remove();
 }

}

var orchestraDomain = {

 addPerformerToDomain: function(IdDomain, performer){
     $('#domain'+IdDomain+' tbody').append(performer);
 }

}

.. 有用。如果通话是这样的

 var performer = {
     del: function(IdPerson){
       $('#performer'+IdPerson).remove().remove();
    }
 }

..它不起作用。我没有看到问题,看到你的人吗?

:: 有什么魔法,你不觉得吗?

4

1 回答 1

2

您有重复的 ID,这就是我认为以及如何确认的原因:

按 ID 删除元素应该只需要完成一次。如果您必须执行两次,则您有两个具有该 ID 的元素。

.remove().remove()不起作用,因为第一个 .remove 将删除所有选定的元素。它只删除选定的元素,它应该只有一个元素。

选择元素两次并删除它两次获得所需结果的事实也证实了您有两个具有该 id 的元素。以下是您可以运行的另一项测试:

var performer = {
    del: function(IdPerson){
        alert( $('[id=performer'+IdPerson+']').length ); // if > 1, your html is invalid and you have duplicate id's.
        $('#performer'+IdPerson).remove();
    }
}
于 2012-08-20T15:00:58.273 回答