Javascript JQuery解除绑定工作,尝试;关于;绑定不起作用
我正在通过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
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)'> </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'> </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*/});
),这意味着它没有名称,但您可以创建命名函数并传递它们。这允许您编写一个函数并在多个位置引用它(而不是编写具有相同内容的多个匿名函数)。