通过实验,我了解到以下代码:
<td><%= link_to 'Notify', '/w/'+w.id+'/notify', method: :get, :class => "btn btn-success notify-btn" %></td>
无论此jQuery:如何都会激发
$('.notify-btn').click(function(e){
e.preventDefault();
bootbox.confirm("Alert?", function(result){
if(result === true){
return true;
} else {
return false;
}
});
});
这是由于方法::get。我一个接一个地删除了链接的元素,并尝试了各种组合。如果方法::get在那里,它就会着火。
我可以用e.stopPropagation阻止它,但它根本不会跟随链接。即使我单击"确定",它也只是坐在页面上无所事事。
如果我去掉erb并使用像这样的直接HTML:
<a href="/w/53531e8a963e6503c60002b2/notify" class="btn btn-success notify-btn" data-method="get">Notify</a>
数据方法="get"在那里,结果相同。如果我删除数据方法,它会弹出警报并阻止跟踪链接,但即使我确认了,它也不会真正触发链接。
你知道我做错了什么吗?
$('.notify-btn').click(function(e){
e.preventDefault();
e.stopPropagation();
var link = $(this).attr('href')
bootbox.confirm("Alert?", function(result){
if(result){
window.location = link;
return true;
} else {
return false;
}
});
});
我不得不使用一些诡计,但上面的办法奏效了。
奇怪的是,它最终同时需要preventDefault和stopPropagation。我尝试了所有可能的组合。
我在试图控制是否应根据某些条件执行link_to请求时也遇到了同样的问题,最终执行了以下
- 使用get或post方法创建隐藏的链接按钮
- 创建可见链接按钮(_T)
- 如果条件为true,则单击可见链接按钮时,将触发隐藏链接按钮
- 如果条件为false,则当单击可见的link_to按钮时,只需返回false即可完成任务
例如假设类。链接到和。使用方法链接到
$('.link-to').click(function(){
if(condition){
$('.link-to-get-method').trigger('click');
return true;
}else{
return false;
}
});