【问题标题】:Press and hold button and change query selector按住按钮并更改查询选择器
【发布时间】:2017-07-25 13:38:02
【问题描述】:

基于问题press and hold button javascript 和小提琴http://jsfiddle.net/0bs3omjj/1/ 我想将代码更改为另一个场景。我想检查 button1 是否为 onmousedown - 按住 - onmouseup,如果是...查询选择器应更改为下一个按钮

我试过了

<div id="myDIV">
<button class="myButton">button 1</button>
<button class="myButton">button 2</button>
<button class="myButton">button 3</button>
<button class="myButton">button 4</button>
</div>

和 JavaScript

var mouse_is_down = false;
var current_i = 0;    
var buttoncounter = 1;
var button = "";
var buttoncount = 0;

function changebutton() {
 var x = document.getElementById("myDIV").querySelectorAll(".myButton");
 x[buttoncount].style.backgroundColor = "red";
 button = x[buttoncount];
 buttoncount++;
}

changebutton();

button.onmousedown = function(){
 mouse_is_down = true;
 console.log("mousedown" + buttoncounter);

setTimeout(
    (function(index){
        return function(){
            if(mouse_is_down && current_i === index){
                //do thing when hold
                console.log("hold" + buttoncounter);
                console.log(button);

            }
        };
    })(++current_i), 500); // time you want to hold before fire action
};

button.onmouseup = function(){
 mouse_is_down = false;
 current_i++;

 console.log("onmouseup" + buttoncounter);

 console.log("change selector");
 buttoncounter++;
 changebutton();
 console.log(button); 

};

但查询选择器仅响应第一个按钮(单击并按住) - 但 javascript 会更改其他按钮的颜色值。怎么了?

【问题讨论】:

  • ID 必须是唯一的。
  • 我想检查 button1 是否为 onmousedown - 按住 - onmouseup 如果是...查询选择器应该更改为下一个按钮 嗯?不知道你在说什么。
  • 投票以拼写错误/暂时关闭。从屋顶喊它:ID 必须是唯一的。
  • 浏览器应该停止渲染包含重复 ID 的网站,这是他们学习的唯一方法。
  • id 在第一个函数 changebutton() 中更改 - 所有具有相同 id 的按钮都被计算在内...如果调用该函数,则 x 变量被计数 - 但是,它的工作原理是远,因为按钮的颜色变了……但我只能按第一个按钮……

标签: javascript button selector state


【解决方案1】:

首先,不要多次使用同一个ID。

其次,您走在正确的道路上,只需将 onmouseup 和其他调用放在您的 changebutton() 函数中即可:

您的 HTML:

<div id="myDIV">
  <button class="myButton">button 1</button>
  <button class="myButton">button 2</button>
  <button class="myButton">button 3</button>
  <button class="myButton">button 4</button>
</div>

您的 Javascript:

var mouse_is_down = false;
var current_i = 0;    
var buttoncounter = 1;
var button = "";
var buttoncount = 0;

function changebutton() {
  var x = document.getElementById("myDIV").querySelectorAll(".myButton");
  x[buttoncount].style.backgroundColor = "red";
  button = x[buttoncount];
  button.onmousedown = function(){
  mouse_is_down = true;

  setTimeout(
    (function(index){
      return function(){
        if(mouse_is_down && current_i === index){
          //do thing when hold
          console.log("hold" + buttoncounter);
          console.log(button);

        }
      };
    })(++current_i), 500); // time you want to hold before fire action
  };

  button.onmouseup = function(){
    mouse_is_down = false;
    current_i++;
    buttoncounter++;
    changebutton();
  };
  buttoncount++;
}

changebutton();

【讨论】:

  • 非常感谢您的帮助 - 我真的很听所有 cmets 的意见 - 但如果您正在一步一步地学习 javascript,解决一些(简单的)问题会有点困难和令人沮丧。跨度>
  • 这很酷。下次,如果您收到 SO 的回复,请尝试调整您的问题。 SO 社区真的很有帮助,但如果你犯了错误,也很清楚。我现在将编辑您的问题,以便您了解其含义。
猜你喜欢
  • 2011-11-04
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
相关资源
最近更新 更多