我有一个切换,我需要在服务器将真/假数据发送到数据库时禁用远程链接。然后,我将重新启用ajax:success
上的链接。
我无法在rails远程链接上使用e.preventDefault()
我希望能够做到这样的事情:
$('body').on('click', '.toggle_link', function(){
//disable remote link
})
$('body').on('ajax:success', '.toggle_link', function(){
//enable remote link
})
有完成此操作的最佳做法吗?
答案 0 :(得分:3)
这应禁用远程链接。
$('#remote_link').removeAttr('data-remote').removeAttr('href')
要重新启用它,您可以将目标网址存储在某个data
属性(data-target
或smth)中,并将href
带回ajax:success
。
答案 1 :(得分:2)
最终为我工作的是使用user2675613的部分答案,然后删除了data-remote="true"
和data-method="put"
属性。
//to disable
var url_link = $(this).attr('href');
$(this).attr('data-href', url_link);
$(this).attr('href', "#");
$(this).removeAttr('data-remote');
$(this).removeAttr('data-method');
//to enable
var url_link = $(this).attr('data-href');
$(this).attr("href", url_link);
$(this).attr("data-remote", "true");
$(this).attr("data-method", "put");
这是一个更新操作,因此根据您的操作,您可以存储数据方法。
答案 2 :(得分:2)
您还可以连接到ujs中的ajax:beforeSend
事件。
$(document).on('ajax:beforeSend', 'a[data-remote=true]', function(event, xhr, status, error) {
// stash the link
// remove the href
});
我使用了一个变量来防止数据远程链接在css类为'disabled'时运行
$(document).on('ajax:beforeSend', 'a.disabled[data-remote=true]', function(event, xhr, status, error) {
event.preventDefault();
event.stopImmediatePropagation();
return false;
});
答案 3 :(得分:1)
要在点击时停用该链接,您可以write it's jquery in your asset pipeline
。由于您无法使用e.preventDefault()
,为什么不简单change it's href to #
。使用data-href属性,该属性将包含您的原始链接,以便再次重新启用它(如果您有很多链接,并且不知道哪个链接将去哪里)。所以在你的jquery文件中你可以这样做:
$('body').on('click', '.toggle_link', function(){
$(this).prop("href", "#");
});
再次重新启用它,您可以执行以下操作:
$('body').on('ajax:success', '.toggle_link', function(){
var url = $(this).data("href");
$(this).prop("href",url);
});
在rails js.erb
文件中是ajax:success。因此,不是在js中编写整个ajax:成功代码,你可以在js.erb文件中编写它,但是你需要以某种方式将data-href的值发送给你的控制器(如果你还不知道url)的链接)。您可以按照以下步骤执行此操作:
一个。将routes.rb文件中的post
网址设置为自定义操作。
湾在你的js文件中写下你的ajax调用:
$('body').on('click', '.toggle_link', function(){
var url_link = $(this).data("href");
$(this).prop("href","#");
$.ajax({
type: "POST",
url: url_link,
data: { data-url: url_link}
});
});
℃。在自定义操作中,您可以按@url = params[:data-url]
d。在js.erb文件中,您可以简单地编写
$("#some_id_of_link").prop("href",@url);
答案 4 :(得分:1)
在添加disabled属性时,这用于禁用remote: true
上link_to
的行为。因此,您可以更清洁地处理这种情况。
$('a[data-remote]').on('ajax:beforeSend', function(event, xhr, settings) {
if($(this).attr('disabled') == 'true' || $(this).attr('disabled') == 'disabled') {
return false;
}
});