提问人:Bart Calixto 提问时间:2/28/2012 最后编辑:Stephen DocyBart Calixto 更新时间:4/22/2018 访问量:1268
成功后解绑 @Ajax.ActionLink
Unbind @Ajax.ActionLink after success
问:
我想在单击后删除 Unobstrusive microsoft ajax @Ajax.ActionLink 绑定。
像这样的东西:
.cshtml:
@Ajax.ActionLink("Edit", "EditDeliveryZones", new { idConnection = ViewBag.idConnection }, new AjaxOptions() { UpdateTargetId = "EditDeliveryZones" }, new { @class = "ajaxdialogopen" })
JavaScript的:
$('.ajaxdialogopen').one('click', function (event) {
$(this).off('click'); // THIS DOESNT WORK
this.onclick = null; // THIS DOESN't WORK EITHER
}
谢谢!
答:
0赞
Ann L.
2/28/2012
#1
你可以尝试类似的东西
$('.ajaxdialogopen').click( function( event ) {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
});
评论
0赞
StriplingWarrior
8/24/2013
event.stopPropagation();
应该就足够了。
-1赞
Bart Calixto
2/28/2012
#2
在读取了 microsoft 和 jquery 库后,它使用 LIVE,这与选择器而不是元素背道而驰。因此,使选择器不匹配(也称为删除类)会使事件不再触发。
为什么 live 被弃用的正当理由......希望微软尽快更新它的库。
评论
1赞
StriplingWarrior
2/28/2012
你说话好像一开始就是一个坏主意。它只是被弃用,因为他们决定将其与 和 函数集成。(他们被弃用了,同时,还记得吗?这本身就不是一个糟糕的方法。live
on
off
bind
unbind
0赞
Bart Calixto
2/29/2012
不要把它当成个人的,我只是指出这是弃用直播的正当理由。
1赞
StriplingWarrior
2/29/2012
对不起,如果我给人的印象是防御性的。我主要是想指出,这根本不是弃用的正当理由。的功能从未被弃用:它只是改变了语法。它仍然是一种完全合法的做事方式,当 Microsoft 更新其库时,它不会改变这些事件的绑定方式。live
live
0赞
Bart Calixto
2/29/2012
你不能在实时阻止Default,因为它会上升到文档以触发处理程序(与.on相比效率低下),而且它不可链接。这使得在实时事件中使用 preventDefault 毫无用处,而我的朋友,从我的角度来看,这才是弃用实时以支持 on 的正当理由。bind / unbind 没有被弃用,只是改为 on 和 off。 bind('click') 现在做一个 .on('click'),它的工作原理是一样的。
1赞
StriplingWarrior
2/29/2012
按照同样的逻辑,/ 没有被弃用,只是改成了 on 和 off。 执行与 相同的操作。/ API 专门设计用于将 /、/ 和 / 组合成一个函数。虽然不能阻止处理程序触发,但确实如此。根据具体情况,实时绑定可能比直接绑定更有效或更低:因此请明智地使用它,但不要完全注销它。live
die
$(document).on('click', '[data-ajax="true"]', ...)
$('[data-ajax="true"]').live(...)
on
off
bind
unbind
delegate
undelegate
live
die
preventDefault
live
stopPropagation
2赞
StriplingWarrior
2/28/2012
#3
把这样的东西放在你的处理程序中怎么样:
$(this).removeAttr('data-ajax');
我相信是实时处理程序触发的属性,因此从链接中删除它应该可以防止它不再被视为ajax链接。data-ajax
评论
0赞
Rex Whitten
8/24/2013
这种方法的唯一问题是,如果您需要该活动怎么办?你只是不想让它绑定 n+ 次吗?我目前正遇到这个确切的问题。由于它不是jquery事件,因此您确实无法取消绑定它,但是如何阻止它第二次绑定呢?
0赞
StriplingWarrior
8/24/2013
@starfighterxyz:我完全不清楚你在说什么。您能否创建一个新问题,详细说明您看到的行为,并从此处提供指向它的链接?
0赞
Rex Whitten
8/27/2013
我很欣赏这个想法,但我会从字面上复制并粘贴 OP。如果删除“data-ajax”,则 Ajax.ActionLink 不再是 ajax,而只是 HTML 的一个休眠部分。这不是一个解决方案。“我车上的刹车不起作用,所以禁用它们!”这里的问题是事件被绑定了 N+ 次。其中 N 是您访问部分页面的次数。
0赞
StriplingWarrior
8/27/2013
@starfighterxyz:这不是我从OP中收集到的,否则我会有不同的回答。在我看来,他确实想在单击事件期间删除 AJAX 绑定。如果您的 AJAX 事件运行多次,那是因为您多次运行实例化 javascript,而它只打算每页运行一次。有多种方法可以解决此问题,其中最简单的方法是将引用放在母版页中,而不是部分视图中。<script>
0赞
Rex Whitten
8/27/2013
我可以看到解释的差异,无论如何感谢您的回复。如果只有母版页包含在 MVC 4 中工作。(即部分视图,其中使用 Jquery,但不在单独的 javascript 文件中使用。
评论