jquery - 使用 'link_to' 和 jQuery 时遇到问题

标签 jquery ruby-on-rails ruby ruby-on-rails-3 link-to

我正在使用 Ruby on Rails 3.0.7 和 jQuery 1.6.1,并将 AJAX 单击事件绑定(bind)到 link_to HTML 输出,如下例所示:

link_to 'Link name', '#', :id => 'link_css_id'

如您所见,我将 URL 设置为“#”。这样做时,当我单击链接时,当前 View 也将移动到页面顶部。因为我不喜欢这种行为,所以我没有为 URL 参数设置任何内容(即 nil''),但是在单击链接时我收到了警告消息“错误”后立即消失。然后在 Firebug 控制台中我得到:

uncaught exception: [Exception... "prompt aborted by user" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: resource://gre/components/nsPrompter.js :: openTabPrompt :: line 468" data: no]

如何解决此问题并避免点击链接时转到页面顶部的行为?


AJAX 请求是:

$jQ('#link_css_id').bind('click', function() {
  $jQ.ajax({
    type:    "POST",
    url:     "<%= user_url(@current_user)%>/test_method",
    data:    "test_data=test",

    error:   function(jqXHR, textStatus, errorThrown) {
      alert(textStatus + ' - ' + errorThrown + '\n\n' + jqXHR.responseText);
      $jQ('#css_id').html('error')
    },
    success: function(data, textStatus, jqXHR) {
      $jQ('#css_id').html('success')
    }
  });
});

最佳答案

url“#”表示正在设置内部 anchor 。没有附加名称,它只是关注整个页面,然后向上滚动到顶部。 至于使用link_to方法,url属性是必需的,不能省略。

对于 jquery,您可以使用 preventDefault。这将阻止事件的默认操作(例如,单击链接将打开 href url)。这很有用。您可能希望为未启用 javascript 的用户链接到现有页面(并且 ajax 调用将不起作用),而那些启用了 javascript 的用户将忽略它。

preventDefault documentation通过 jQuery。

关于jquery - 使用 'link_to' 和 jQuery 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6453114/

相关文章:

javascript - 无法在另一个事件的绑定(bind)函数中绑定(bind) member_removed pusher 事件

ruby - 将 Redis 事务包装在数据库事务中

ruby-on-rails - 从父类(super class)调用子类方法

ruby-on-rails - Rspec 和大型规范文件组织

javascript - rails 5,远程 : true form empty data

javascript - 无法循环出菜单项的事件监听器

javascript - 隐藏内容直到其父级被点击

JQuery 多个 ID

javascript - 标签和内部标签的工具提示

ruby-on-rails - Rails4 和 MongoMapper