首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jquery打开具有不同数据属性的按钮

用jquery打开具有不同数据属性的按钮
EN

Stack Overflow用户
提问于 2018-04-14 19:40:56
回答 1查看 33关注 0票数 0

我有一张有三个按钮的桌子--我用的是jquery-"3.2.1"

我正在尝试使用下面的javascript-file Builder在稍后的if语句中加载正确的数据。

我的expected output是:

如果按下f.ex.:Add CPU按钮,则会出现警告消息console.log("cpu clicked")

下面您可以找到我的最小可行示例:

代码语言:javascript
复制
class Builder {
  constructor() {
    this.events();
  } // end constructor

  events() {
    $(".btn btn-primary btn-sm").on("click", this.ourClickDispatcher.bind(this));
  }

  // methods
  ourClickDispatcher(e) {
    var currentButton = $(e.target).closest(".btn btn-primary btn-sm");
    console.log("test")

    if (currentButton.data('exists') == 'cpu') {
      console.log("cpu clicked")
    }

    if (currentButton.data('exists') == 'motherboard') {
      console.log("motherboard clicked")
    }

    if (currentButton.data('exists') == 'graphic-card') {
      console.log("graphic-card clicked")
    }
  }

}

export default Builder;
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<table style="float: left;" class="table table-bordered">
  <tbody>
    <tr>
      <td>CPU</td>
      <td>
        <button type="button" data-cpu="cpu" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#exampleModal">
                                            Add CPU
                                        </button>
      </td>
    </tr>
    <tr>
      <td>Motherboard</td>
      <td>
        <button type="button" data-motherboard="motherboard" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#exampleModal">
                                            Add Motherboard
                                        </button>
      </td>
    </tr>
    <tr>
      <td>Graphic Card</td>
      <td>
        <button type="button" data-graphicCard="graphic-card" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#exampleModal">
                                            Add Graphic Card
                                        </button>
      </td>
    </tr>
  </tbody>
</table>

如您所见,所有3个按钮都具有相同的class属性,但在data-属性中进行区分以加载正确的输出。

如果单击了任何按钮,那么下面的脚本为什么不给我expected output呢?

谢谢你的回复!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-14 19:53:41

如果使用$(".btn btn-primary btn-sm"),您希望使用所有这些类来针对元素,则需要使用

代码语言:javascript
复制
$(".btn.btn-primary.btn-sm")

(每个类没有空格和一个.,这是正确的css语法)

其次,您的数据属性(根据您的脚本)都应该使用不同的值命名data-exists,而不是为每个属性命名不同的属性。

所以

代码语言:javascript
复制
<button type="button" data-exists="cpu"  ...> 
<button type="button" data-exists="motherboard"  ...>
<button type="button" data-exists="graphic-card"  ...>

如果您确实希望检查该属性是否存在,则应使用

代码语言:javascript
复制
if (currentButton[0].dataset.cpu) {...}
if (currentButton[0].dataset.motherboard) {...}
if (currentButton[0].dataset.graphicCard) {...}

如果必须使用jQuery (不支持dataset的浏览器),则使用.is方法

代码语言:javascript
复制
if (currentButton.is('[data-cpu]')) {...}
// etc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49835464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档