Rails 3 + Jquery在第一次单击时没有任何操作

时间:2011-08-20 19:58:53

标签: jquery ruby-on-rails ruby-on-rails-3 jquery-ui

我的jquery有问题但无法找到原因。 当我第一次点击链接时,没有任何反应。在第二次单击时,我的链接工作。这是我的代码。

aplication_helper.rb
def link_to_share(name, url)
  link_to_function(name, "share_link(name, url)")
end

我的jquery文件

function share_link(link, url)
{
  $(link).click(function() {

    window.open('http://www.facebook.com/sharer.php?u='+ url, 'popupwindow', 'height=430,width=500')
  });
}

我的观点

<%= link_to_share 'Share', request.url %>

如果我改变我的jquery函数,如

function share_link(link, url)
{
  $(link).live('click', function() {

    window.open('http://www.facebook.com/sharer.php?u='+ url, 'popupwindow', 'height=430,width=500')
  });
}

脚本停止工作。

在我的Firebug调试器中,第一次点击没有错误,第二次尝试使用live函数,也没有错误。

我使用gemfile中的jquery-uij。

感谢。

3 个答案:

答案 0 :(得分:0)

什么都没有正在发生,或者是否正在调用事件处理程序但是窗口没有被打开?它可能是一个狡猾的弹出窗口拦截器。在函数中放置alert()以查找。

答案 1 :(得分:0)

function share_link(link, url)
{
  $(link).click(function() {

    window.open('http://www.facebook.com/sharer.php?u='+ url, 'popupwindow', 'height=430,width=500')
  });
}

该代码的问题在于它在发生click事件后添加了侦听器。所以第一次没有任何事情发生的原因是还没有事件处理程序。但是在第二次单击时,您将调用通过第一次单击创建的事件处理程序。看看你是否可以重新编写代码,可以将share_link作为事件处理函数本身。

function share_link(event)
{
 ...
}
$(link).click(share_link);

答案 2 :(得分:0)

要使代码正常工作,请删除点击处理程序

$(link).live('click', function() {
}

然后离开

function share_link(link, url)
{
    window.open('http://www.facebook.com/sharer.php?u='+ url, 'popupwindow', 'height=430,width=500')
}

您不需要定义单击处理程序,因为您正在使用link_to_function帮助程序。 link_to_function帮助程序只调用您单击该链接时输入的函数。

有关详细信息,请查看documentation。我不知道这个帮手,谢谢你提出这个问题。