【问题标题】:How do you add functions to an assortment of buttons sequentially如何按顺序向各种按钮添加功能
【发布时间】:2016-07-01 15:15:07
【问题描述】:

我有几个带有 opt 类的 div 标签,其中有一个输入和按钮元素。我正在尝试创建一个函数,该函数将从输入标签中获取值,当您单击按钮时,将弹出下一个输入和按钮字段并要求您输入不同的信息,而前一个输入和按钮标签将自行隐藏.但是,这里的功能不起作用的是jsfiddle

HTML

<div id="container">


    <div class="opt active">  <input type="text"  placeholder ="Enter Name"name="name"> <button>OK</button>
    </div>

    <div class="opt">  
      <input type="text"  placeholder ="Enter Age" name="age"> <button>OK</button>
    </div>

    <div class="opt">  
      <input type="text"  placeholder ="Enter Race" name="race"> <button>OK</button>
    </div>

    <div class="opt">  
      <input type="text"  placeholder ="Enter Sex" name="sex"> <button id="done">Done</button>
    </div>


  </div>

Javascript

function init(){

  var opt = document.getElementsByClassName('opt');

    var num = 0;
    var prop = [];
    var propVal = [];


  for (var i = 0 ; i < opt.length; i++)
  {
    opt[i].querySelector('input').value = "";
  }



   opt[num].querySelector('button').onclick = function()
  {
     prop[num] = opt[num].querySelector('input').name;
     propVal[num]= opt[num].querySelector('input').value;

    opt[num].className = "opt";
    opt[num+1].className ="opt active"; 
    console.log(prop +" "+ propVal);
     num++;
  };//button function






}


init();

【问题讨论】:

  • 点击最后​​一个按钮会发生什么?表格是否应该正常提交?
  • @Shaggy 在单击最后一个按钮时应该激活另一个功能,该功能将显示您放入输入标签的信息。但是,我还没有创建它

标签: javascript css


【解决方案1】:

您还需要在循环中绑定点击处理程序。当您可以使用对象时,您也不需要使用并行数组来存储属性。

在尝试更改下一个输入的类之前,请确保“下一个输入”。

var opt = document.getElementsByClassName('opt'),
    num = 0, prop = {};

function nextInput() {
  var input = opt[num].querySelector('input');
  prop[input.name] = input.value;
  console.log(prop);

  opt[num].className = "opt";
  if (num + 1 < opt.length) {
     opt[num + 1].className = "opt active";
     num++;
  } else {
     // submit?
  }
}

for (var i = 0; i < opt.length; i++) {
  opt[i].querySelector('input').value = "";
  opt[i].querySelector('button').onclick = nextInput;
}
.opt { display: none }
.opt.active { display: block }
<div id="container">
  <div class="opt active">
    <input type="text" placeholder="Enter Name" name="name">
    <button>OK</button>
  </div>
  <div class="opt">
    <input type="text" placeholder="Enter Age" name="age">
    <button>OK</button>
  </div>
  <div class="opt">
    <input type="text" placeholder="Enter Race" name="race">
    <button>OK</button>
  </div>
  <div class="opt">
    <input type="text" placeholder="Enter Sex" name="sex">
    <button id="done">Done</button>
  </div>
</div>

【讨论】:

  • 感谢您帮助我解决问题。我觉得你也可以用 forEach 方法来做到这一点。但是,当我尝试将 opt 数组与 forEach 方法一起使用时,我会收到一条错误消息,指出 forEach 不是函数。
  • 啊,是的。那是因为getElementsByClassName 实际上并没有返回一个数组。它返回一个HTMLCollection,它没有像forEach 这样的数组方法,但确实看起来像一个(因为对象也可以使用括号表示法)。查看this question,以便您可以使用数组方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多