【问题标题】:change button color on-click for multiple buttons单击多个按钮更改按钮颜色
【发布时间】:2017-10-26 08:46:27
【问题描述】:

上一个问题的答案是有效的,click here to see. 但仅适用于单个按钮而不是多个按钮以供参考,请参阅此处http://jsfiddle.net/wmy8vucb/9/

$( "#myBtn" ).click(function() {

$(this).addClass('myclass');

localStorage.setItem('clicked', '1');

});



if(localStorage.getItem("clicked") != null){

$("#myBtn").addClass('myclass');


}
.myclass{
  background-color:green !important;
}
<button id="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="IeUtIMnV0V1JpQlU">Procced</button>

<button id="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="khjdvhbjdhjbvjkbs">Procced 2</button>

<button id="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="hdfhkdsvkhvs">Procced 3</button>

so-on

【问题讨论】:

  • 不要创建多个具有相同 id 的元素。将事件处理程序附加到类而不是 id。
  • 也不要链接到较早的问题,只需将所需的信息放在这个问题中。

标签: javascript jquery html button onclick


【解决方案1】:

多个元素不允许有相同的ID。因此,不要使用 ID #myBtn 来选择按钮,而应该使用 .myBtn 类来选择它们。

另外,对于localStorage,您可以将点击按钮的 ID 存储在一个数组中。

HTML

<button id="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="sdhjbaskjhnbsdvkjnd">Procced</button>

<button id="myBtn1" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="hbsddjhbsdjbhsd">Procced 2</button>

<button id="myBtn2" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="kjfkjbsdkbjsdvbjk">Procced 3</button>


so-on

JS

$(".myBtn").click(function() {

  $(this).addClass('myclass');

    var itemsStr = localStorage.getItem('clicked');
  var items = [];
  if(itemsStr) {
     items = JSON.parse(itemsStr);
  }
    items.push($(this).attr("id"));
  localStorage.setItem('clicked',JSON.stringify(items));

});

if (localStorage.getItem("clicked") != null) {
  var itemsStr = localStorage.getItem('clicked');
  var items = [];
  if(itemsStr) {
     items = JSON.parse(itemsStr);
  }

  items.forEach(function(id) {
    $("#" + id).addClass("myclass");
  });
}

这是更新后的小提琴:http://jsfiddle.net/wmy8vucb/11/

我还有其他一些建议:

  • 避免设置内联样式:style="background: #ef332d; color: #fff;"。相反,您可以创建一个具有这些样式的 CSS 类,然后将其设置为按钮。

  • 尽可能避免使用!important。这通常被认为是一种不好的做法。

【讨论】:

  • 如果您能在这里执行它,我将不胜感激jsfiddle.net/wmy8vucb/9 我在执行代码时遇到了麻烦。谢谢
  • @oceanoffilescom 是的,我刚刚意识到。我将链接添加到更新的小提琴。
  • 请注意网站上所有按钮的id="mybtn",因为需要执行一些脚本,只有data-uid="kjfkjbsdkbjsdvbjk"按钮不同.拜托,我急需帮助。
  • @oceanoffilescom 这是你想要的吗:jsfiddle.net/wmy8vucb/13?您可以在处理点击事件时使用$(this).attr('data-uid') 获取data-uid,并在初始页面加载时设置其类时使用$("button[data-uid='uid']") 找到按钮。
【解决方案2】:

你应该放jquery链接

&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;

在页面底部和 jquery 链接后的 jquery 脚本。

<button class="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="IeUtIMnV0V1JpQlU">Procced</button>

<button class="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="khjdvhbjdhjbvjkbs">Procced 2</button>

<button class="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="hdfhkdsvkhvs">Procced 3</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    $(".myBtn").click(function() {

        $(this).addClass('myclass');
        localStorage.setItem('clicked', '1');

    });



    if(localStorage.getItem("clicked") != null){

        $(".myBtn").addClass('myclass');


    }
</script>
</body>

【讨论】:

  • jQuery的导入位置不是这里的实际问题。
  • 在这段代码中,我将 id 更改为 class,将 # 更改为 .
  • 实际上你不能在同一个元素上两次指定类。
【解决方案3】:

我已经编辑了你的小提琴检查以下可能对你有帮助。

$( ".btn" ).click(function() {
var x=$(this).attr('class').split(' ').pop();

if(x=='myclass')
{
$(this).removeClass('myclass');
}
else
{
$(this).addClass('myclass');
}

});
.myclass{
  background-color:green !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="sdhjbaskjhnbsdvkjnd">Procced</button>

<button id="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="hbsddjhbsdjbhsd">Procced 2</button>

<button id="myBtn" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" data-uid="kjfkjbsdkbjsdvbjk">Procced 3</button>


so-on

【讨论】:

  • 感谢您所做的一切,但我需要将点击存储在 localStorage 上以记录点击,这样即使用户刷新页面,用户也可以看到哪个按钮已被点击。几乎一切正常,唯一的问题是网站上的每个按钮都共享相同的 id=myBtn 等等。只有 data-uid="sdhjkdsh" 的按钮不同,所以要克服这个点击必须保存在 data-uid=''sdhjkdsh'' 来确定一个页面上只有一个或两个按钮被点击。