【问题标题】:How can buttons be targeted using id instead of index?如何使用 id 而不是索引来定位按钮?
【发布时间】:2020-07-16 14:52:56
【问题描述】:

出于维护目的,我只想使用 ID 而不是索引来更改按钮的背景颜色。任何建议如何做到这一点?

从 jsfiddle 运行代码:https://jsfiddle.net/p6kuf0zv/4/

或者看code-sn-p的代码:

// On click on a button, a popover menu will show up
      $("[data-toggle=popover]").popover({
        html: true,
        sanitize: false,
        trigger: 'focus',
        content: function() {
          return $('#popover-content').html();
        }
      });
      // Creates data items inside local storage with keyName and keyValue
      var saveColorPref = (keyName, keyValue) => {
        localStorage.setItem(keyName, keyValue);
        return keyValue;
      }
      // Retrieves data items from local storage
      var getColorPref = (keyName) => {
        return localStorage.getItem(keyName);
      }
      // How can the code bellow be changed to make use of ID instead of index?
      var targetBtn;
      function setColor(keyValue) {
        var keyName = $(targetBtn).index();
        console.log(keyName, keyValue);
        $(targetBtn).css("background", saveColorPref(keyName, keyValue));
      }
      $('.myBtn').each((keyName, item) => {
        $(item).click((e) => {
          targetBtn = e.target;
        });
      });
.demo1{
        background-color: red;
      }
      .demo2{
        background-color: green;
      }
      .demo3{
        background-color: blue;
      }
<head>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>

  <body>
    <button class="myBtn" id="1" data-toggle="popover" data-placement="bottom" data-html="true">1</button>
    <button class="myBtn" id="2" data-toggle="popover" data-placement="bottom" data-html="true">2</button>
    <div id="popover-content" class="hide">
      <button class="demo1" onClick="setColor('red')">Red</button>
      <button class="demo2" onClick="setColor('green')">Green</button>
      <button class="demo3" onClick="setColor('blue')">Blue</button>
      <span class="close">&times;</span>
    </div>
   </body>

【问题讨论】:

    标签: javascript jquery html bootstrap-4 popover


    【解决方案1】:

    回应:

    如何使用 id 而不是索引来定位按钮?

    修改setColor函数如下图:

    之前:

    function setColor(keyValue) {
      var keyName = $(targetBtn).index();
      console.log(keyName, keyValue);
      $(targetBtn).css("background", saveColorPref(keyName, keyValue));
    }
    

    之后:

    function setColor(keyValue) {
      var keyName = $(targetBtn).attr('id');
      console.log(keyName, keyValue);
      $(targetBtn).css("background", saveColorPref(keyName, keyValue));
    }
    

    SO sn-p 抛出此错误:

    Uncaught DOMException: Failed to read the 'localStorage' property from 'Window': The document is sandboxed and lacks the 'allow-same-origin' flag.
    

    所以您看不到按钮颜色的变化。不过,这适用于您的 jsfiddle。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 2011-04-21
      相关资源
      最近更新 更多