Javascript JQuery解除绑定工作,尝试;关于;绑定不起作用

Javascript JQuery解除绑定工作,尝试;关于;绑定不起作用,javascript,jquery,bind,unbind,Javascript,Jquery,Bind,Unbind,我正在通过JQuery解决方案工作,在大多数情况下它是有效的,但我被一个我知道我忽略的小细节难住了。见鬼,也许我的实现/方法需要重新考虑 以下是工作流程。 1.单击添加到表中的定位点。 2.添加CSS类。 3.禁用(解除绑定)在preappend()后单击。 4.从动态添加的记录表中根据ID删除表。 5.删除步骤2中添加的类。 6.绑定“单击” 但是,尽管我可以绑定单击和警报,但预期的功能不允许我再次执行上述过程 有关守则: HTML示例: 启动流程的链接: <a href="#" cla

我正在通过JQuery解决方案工作,在大多数情况下它是有效的,但我被一个我知道我忽略的小细节难住了。见鬼,也许我的实现/方法需要重新考虑

以下是工作流程。
1.单击添加到表中的定位点。
2.添加CSS类。
3.禁用(解除绑定)在preappend()后单击。
4.从动态添加的记录表中根据ID删除表。
5.删除步骤2中添加的类。
6.绑定“单击”

但是,尽管我可以绑定单击和警报,但预期的功能不允许我再次执行上述过程

有关守则:

HTML示例:
启动流程的链接:

<a href="#" class="view-carrier-scorecard"></a>
<a href="#" class="view-carrier-trend"></a>
<a href="#" class="view-carrier-insurance"></a>
<a href="#" id="17053942" class="add-carrier-company"></a>

单击链接后保存新记录的表

<table id="carrier-table"><tbody></tbody></table> 

JQUERY和自定义Javascript函数

   <script type="text/javascript" id="removeCarrier">
     function removeCarrierFromList(obj) {
       var i = obj.parentNode.parentNode.rowIndex;
       document.getElementById('carrier-table').deleteRow(i);
       $('a#' + obj.id).removeClass('delete-carrier-company');
       //alert(obj.id); //.hasClass('add-carrier-company').tostring() ); //

       $('a#' + obj.id).bind('click', function() {
          //alert('User clicked on ' + obj.id);
       });
     }
   </script>



 <script type="text/javascript" id="carrierListJS">
    $(function() {

      // Link
      // This adds a carrier to a list
      $('.add-carrier-company').click(
      function() {

        var target = $(this).attr("id");
        alert(target);
        $("#carrier-table").prepend("<tr id='carrierRow_" + target + "'>" +
       "<td><a href='#' id='" + target + "' class='delete' onclick='removeCarrierFromList(this)'>&nbsp;&nbsp;&nbsp;&nbsp;</a></td>" +
       "<td class='carrier-list-text'>" + target + " " + $("#name_" + target).val() + "</td>" +
      "</tr>");

        return false;
      });

      $('.add-carrier-company').click(
       function() { $(this).addClass('delete-carrier-company').unbind('click'); }
      );

    });
  </script>

函数removeCarrierFromList(obj){
var i=obj.parentNode.parentNode.rowIndex;
document.getElementById('carrier-table').deleteRow(i);
$('a#'+obj.id).removeClass('delete-carrier-company');
//警报(obj.id);/.hasClass('add-carrier-company').tostring()//
$('a#'+obj.id).bind('click',function()){
//警报('用户单击'+obj.id');
});
}
$(函数(){
//链接
//这会将承运人添加到列表中
$(“.添加承运人公司”)。单击(
函数(){
var target=$(this.attr(“id”);
警报(目标);
$(“#载体表”)。前置(“”+
"" +
“+target+”++$(“#name"+target).val()++”+
"");
返回false;
});
$(“.添加承运人公司”)。单击(
函数(){$(this).addClass('delete-carrier-company').unbind('click');}
);
});

我注意到代码中存在一些问题。一方面,正如@RussellUresti所提到的,您创建了两个具有相同ID的标记。另一方面,如果您在jQuery的选择器中使用ID,则不包括标记名,只需使用ID(即使用
$('.'ID')
而不是
$('a#ID')
),速度会更快(但它不会破坏您的代码)

我已经创造了一个答案来回答你的问题(虽然我重写了大部分内容):)我想这就是你想要的

代码如下:
测试HTML

<a href="#" class="view-carrier-scorecard">aa</a>
<a href="#" class="view-carrier-trend">bb</a>
<a href="#" class="view-carrier-insurance">cc</a>
<a href="#" id="10002" class="add-carrier-company">10002</a>
<a href="#" id="10003" class="add-carrier-company">10003</a>

<table id="carrier-table" style="border:1px solid #000"><tbody></tbody></table> 

JavaScript

function addCarrier() {
    var target = $(this).attr("id");
    $("#carrier-table").prepend("<tr id='carrierRow_" + target + "'>" + "<td><a href='#' id='a" + target + "' class='delete'>&nbsp;&nbsp;&nbsp;&nbsp;</a></td>" + "<td class='carrier-list-text'>" + target + " " + $("#name_" + target).val() + "</td>" + "</tr>");
    $('#a' + target).click(removeCarrierFromList);
    $(this).addClass('delete-carrier-company').unbind('click');
    return false;
}

function removeCarrierFromList() {
    var $this = $(this);
    var id = $this.attr('id').replace("a","");
    $this.closest('tr').remove();
    $('#' + id).removeClass('delete-carrier-company').click(addCarrier);
}

$(function() {

    // Link
    // This adds a carrier to a list
    $('.add-carrier-company').click(addCarrier);
});
函数addCarrier(){
var target=$(this.attr(“id”);
$(“#载体表”).prepend(“+”“+”“+目标+”++$(“#名称#+目标).val()+”“+”);
$('a'+目标)。单击(从列表中删除载波);
$(this).addClass('delete-carrier-company')。解除绑定('click');
返回false;
}
函数removeCarrierFromList(){
var$this=$(this);
var id=$this.attr('id').replace('a',');
$this.closest('tr').remove();
$(“#”+id)。删除类('delete-carrier-company')。单击(addCarrier);
}
$(函数(){
//链接
//这会将承运人添加到列表中
$(“.添加承运人公司”)。单击(添加承运人);
});

FYI,如果您只按enter/return键,则不会创建新行。您必须在上面的行末尾添加两个空格或按enter/return键两次。请确保查看问题文本区域下方的帖子预览,以查看发布时的样子。有关该内容的详细信息,请单击或单击帖子文本区域上方的
按钮。这段代码不会最终创建两个具有相同ID的锚定标记吗?您最初的add carrier company标记的ID为17053942,并且预先添加到表中的锚定标记也将具有相同的ID,对吗?可能问题是,当两个元素具有相同ID时,试图基于ID选择器绑定事件?做得好!!感谢您的参与回答的时间到了。只做了两周的jquery,你的社区参与得到了像我这样的开发人员的高度赞赏。现在,我将更深入地研究你的解决方案,从我的错误中吸取教训。再次感谢!在看了你的代码之后,好的。我是否正确地理解了你使用jquery代理?我应该纠正我自己,而不是e委托jquery的函数,但将函数作为参数传入。@Jose Quinones:它有点类似于委托。基本上,在JavaScript中(它不是特定于jquery的),所有内容都被视为对象,包括函数。因此,这意味着您可以将函数分配给变量,甚至可以将它们传递到函数中。在jQuery中调用具有回调的函数时,它会将您传递的函数分配给变量,并在适当时调用它。通常,您会创建一个匿名函数(即,
$.dosomething(function(){/*do stuff*/});
),这意味着它没有名称,但您可以创建命名函数并传递它们。这允许您编写一个函数并在多个位置引用它(而不是编写具有相同内容的多个匿名函数)。