【问题标题】:jQuery Button Handler vs inline onClickjQuery 按钮处理程序与内联 onClick
【发布时间】:2011-12-31 12:17:15
【问题描述】:

问题来了: 我在页面上有一个项目列表,每个项目都有自己的链接/按钮来删除它。目前,我在每个按钮上都有一个 onclick,因为每个按钮都需要将项目的 id 和描述/名称传递给 JS 函数。

我想让它不那么突兀,但想不出办法。有什么建议吗?

这是当前设置的示例:

function doButtonThings(id, desc) {
    //jQuery to do some stuff and then remove the item from the page
}

还有页面:

<!-- standard html page stuff -->
<ul>
    <li><button onclick="doButtonThings(1001, 'The thing we delete');"></button> Some thing that can be deleted #1</li>
    <!-- imagine many more list items this way with different ids and descriptions -->
</ul>
<!-- standard end of html page stuff -->

【问题讨论】:

  • 您可以添加一个jQuery事件处理程序,当它被点击时遍历DOM并获取您想要的ID(甚至是元素)。
  • 我喜欢这个解决方案,因为它非常简单。我想我可以使用 name 属性作为描述,使用 id 作为 ID,是的。

标签: jquery click inline handler unobtrusive


【解决方案1】:

您可以将数据存储在 HTML 数据属性中:

<button data-myId="1001" data-myDescr="The thing we delete">Click me</button>

然后在 jQuery 点击处理程序中使用它们:

$('button').click(function() {
    var $this = $(this),
        id = $this.data('myid'),
        descr = $this.data('mydescr');

    doButtonThings(id , descr );
});

这里有一个小提琴来说明:http://jsfiddle.net/didierg/fhLde/

【讨论】:

  • 我非常喜欢这个。数据属性是 HTML5 的特性,对吧?我和下一个家伙一样喜欢站在前沿,但 HTML5 还不是草稿吗?我想我还没有真正在那里完成我的功课。我真正关心的是所有当前版本的主要浏览器都支持它。如果是这样,我想这就是我的答案。
  • 据我记忆,数据属性在所有浏览器中都可以使用,很确定它们甚至可以在 IE 中使用。 :-)
  • 是的,它们是 HTML5 规范的一部分,但这适用于所有主流浏览器。
  • 谢谢,伙计们。你帮了大忙。火箭,我也赞成你的回答,但这是一个评论。 :-P ...没关系,我不能投票。我没有 15 个代表 :-(
  • 虽然只有较新的浏览器支持特殊的 JavaScript 属性 element.dataset 来访问数据属性,但在旧浏览器上使用它们没有任何阻碍。较旧的浏览器会忽略这些属性,但在使用 jQuery 时,您仍然可以通过 element.getAttribute('data-...')$(element).attr('data-...') 访问它们。 jQuery 甚至会在它自己的$(element).data(...) API 中自动合并数据属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 2013-09-09
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
相关资源
最近更新 更多