我正在使用Ruby on Rails 3.0.7和jQuery 1.6.1,我将AJAX点击事件绑定到link_to
HTML输出,如下例所示:
link_to 'Link name', '#', :id => 'link_css_id'
如您所见,我将网址设置为“#”。当我点击链接时,当前视图也将移动到页面顶部。由于我不喜欢这种行为,因此我没有为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')
}
});
});
答案 0 :(得分:9)
网址“#”表示正在设置内部锚点。没有附加名称,它只关注整个页面,并向上滚动到顶部。
至于使用link_to
方法,url
属性是必需的,不能省略。
使用jquery,您可以使用preventDefault
。这将阻止事件的默认操作(例如,单击链接将打开href
URL)。这非常有用。您可能希望链接到未启用javascript的用户的现有页面(以及ajax调用无效的用户),而有javascript的用户会忽略它。
preventDefault documentation来自jQuery。
答案 1 :(得分:2)
您可以设置javascript:void(0)
而不是#
它可以帮助我。
答案 2 :(得分:1)
保留#
,并使用preventDefault
停止默认点击事件移动窗口。