【问题标题】:JQuery: Convert onClick attribute to to jQuery clickJQuery:将 onClick 属性转换为 jQuery click
【发布时间】:2011-10-20 00:27:02
【问题描述】:

我有一个包含 100 多个超链接的网页,这些超链接都设置了 onClick 和 href 属性。这在大多数情况下都有效,但我遇到了像 IE7 这样的浏览器在 onClick 属性上使用 href 属性的问题。我需要将 onClick 属性设为默认值,以便我的函数在点击时加载。我想我可以使用 jQuery 轻松地做到这一点,并将点击事件设置为 onClick 属性值,但我没有任何运气,我该怎么做呢?现在,下面的代码将大量点击事件设置为单个超链接。当我点击一个超链接时,我可以看到为超链接多次发送的 GET 事件。

    $("a[href*='/RightSizeOption/NewForm.aspx']").click(function() {
        OpenPopUpPage($(this).attr('href'), RefreshPage); 
        return false;
    });

【问题讨论】:

  • 最好的办法是一劳永逸地清理你的代码。这样会更容易维护。此代码只会为每个与选择器匹配的链接添加一个单击事件处理程序。
  • 所以,你说你已经删除了 onclick,并且你正在使用上面的代码专门设置点击处理程序......你确定点击处理程序实际上被触发超过一次?还是您的 OopenPopUpPage 正在做一些时髦的事情?尝试在 click 处理程序中添加一个 console.log 语句以确定它实际执行了多少次。
  • 另外,如果我将 "$(this).attr('href')" 放入警报中,它会通过我点击的超链接的 href 提醒我 10 次以上?
  • 向我们展示您的 html 代码示例,其中包含一些链接,以便我们恢复行为。
  • 这是一个 SharePoint 2010 页面,之前我使用连接 href 和 OpenPopUpPage 函数(模式对话框的共享点函数)的函数设置 onClick 事件。我现在禁用了设置 onclick 的脚本并尝试使用上面的 jquery 来设置点击事件,它最终将 100 多个模式对话框全部启动到同一页面....我认为启动的数量等于超链接的数量

标签: javascript jquery sharepoint click onclick


【解决方案1】:

似乎没有意义,除非该确切的点击处理程序实际上被绑定了多次。绑定点击的更好方法是使用委托(也使用 preventDefault 而不是 return false 以获得良好的衡量标准):

$('#myParent').delegate("a[href*='/RightSizeOption/NewForm.aspx']", "click", function(event) {
  event.preventDefault();
  OpenPopUpPage($(this).attr('href'), RefreshPage); 
});

#myParent 是任何预期不会被破坏的祖先元素;甚至可以是包装器 div 或“body”,尽管最好选择最近的、永远不会被破坏的共同祖先。

但让我担心的是多重绑定;例如,如果您的示例代码在一个函数中,则该函数会被多次触发。

我也不确定您传递给 OpenPopUpPage 的“刷新页面”。我必须看看 OpenPopUpPage 做了什么才能冒险猜测。

【讨论】:

  • 我认为你成功了!我不知道我是怎么看过去的,我的脚本每 200 毫秒重新触发一次,因为我在 SharePoint 中使用分组,并且数据不会在页面上呈现,直到分组展开。所以我想我的新问题是如何防止绑定到点击事件,如果一个已经存在/
  • 如果您从文档就绪函数中委托,并委托给所有分组的祖先,它会自动处理。另一个喜欢 delegate() 而不是 click() 的原因!
  • 不是真的关注你吗?我的其他问题是我使用的是 SharePoint 2010,因此所有类和 id 都是自动设置的,并且随着 SharePoint 以不同方式呈现页面,它们会因浏览器而异……有什么建议吗?
  • 好吧,我确实发现所有用于扩展分组的超链接都有这个共同点
  • 当您委托时,您将祖先(或父,但您想标记它)作为事件侦听器,而不是锚标记。所以你可以说,“body 元素(或任何祖先),我希望你用这个 href 来监听锚点的点击”(根据我的示例)。以后添加更多锚标签也没关系,监听器仍然是主体(或其他)元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 2013-08-01
相关资源
最近更新 更多