首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >想要创建一个数组按钮

想要创建一个数组按钮
EN

Stack Overflow用户
提问于 2019-01-03 12:37:16
回答 6查看 74关注 0票数 0

我正在尝试使用数组创建一个按钮,但是当我尝试在文本输入中写入文本并尝试创建一个按钮时,它不会改变该值。

代码语言:javascript
复制
function ready() {

  var family = ["demo1", "demo2", "demo3", "demo4", "demo5", "demo6"];

  function btns() {
    var btn = $("<button>" + family[i] + "</button>")
    $(btn).attr("data-search", family[i])
    $(btn).appendTo("#buttons")
  }

  var submit = $("<button>Submit</button>");
  var text = $("<input type='text' name='text'>");
  $(text).appendTo("#submit");
  $(submit).appendTo("#submit");



  for (i = 0; i < family.length; i++) {

    btns();
  }

  $(submit).on("click", function() {
    var textBtn = text.val();
    family.push(textBtn);
    btns();


  })

}
ready();
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body>
  <div class="container">
    <div class="row">
      <div id="buttons"></div>
    </div>
    <div class="row">
      <div class="col-sm-3">
        <div id="gif"></div>
      </div>
      <div class="col-sm-9">
        <div id="submit"></div>
      </div>
    </div>
  </div>

</body>

EN

回答 6

Stack Overflow用户

发布于 2019-01-03 12:52:06

这就是你要找的东西吗?代码已被注释,以向您显示步骤

代码语言:javascript
复制
var family = ["demo1", "demo2", "demo3", "demo4", "demo5", "demo6"];

// for each family add a button
const buttons = family.map(el => $(`<button data-search="${el}">${el}</button>`));
$('#buttons').append(buttons);

function addButton() {
  // get the value of the text input
  const val = $('#button-text').val();
  // if the value is not empty
  if (val.trim().length) {
    // create the new button and append it
    const btn = $(`<button data-search="${val}">${val}</button>`);
    $('#buttons').append(btn);
    // add the val to the family array
    family.push(val);
    // add the button to the buttons array
    buttons.push(btn);
    // reset the input field
    $('#button-text').val('');
  }
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="buttons">
</div>

<div>
  <input type="text" id="button-text"/>
  <button onClick="addButton()">Add Button</button>
</div>

票数 0
EN

Stack Overflow用户

发布于 2019-01-03 12:55:29

现有代码的问题在于,您在for循环中声明了变量i,但在手动添加新按钮时并没有递增该值。

如果您按如下方式更新submit按钮单击事件,您将实现所需的功能:

代码语言:javascript
复制
$(submit).on("click", function(){
    var textBtn = text.val();
    family.push(textBtn);
    console.log(family);
    btns();
    i++; // Added the increment of 'i' here.
});

然而,我相信有一种更有说服力的方法来解决这个问题,而不需要跟踪数组索引。

票数 0
EN

Stack Overflow用户

发布于 2019-01-03 12:59:07

这里有几件事

  1. 你可能不需要使用js来创建输入和按钮。您可以使用html来创建它。

循环中的i是全局的,在它前面放一个关键字,然后将该family[i]传递给btns函数

代码语言:javascript
复制
var family = ["demo1", "demo2", "demo3", "demo4", "demo5", "demo6"];

function btns(val) {
  var btn = $("<button>" + val + "</button>")
  $(btn).attr("data-search", val)
  $(btn).appendTo("#buttons")
}
for (let i = 0; i < family.length; i++) {
  btns(family[i]);
}




$("#submitBtn").on("click", function() {
  var textBtn = $("#submitIp").val();
  btns(textBtn);


})
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body>
  <div class="container">
    <div class="row">
      <div id="buttons"></div>
    </div>
    <div class="row">
      <div class="col-sm-3">
        <div id="gif"></div>
      </div>
      <div class="col-sm-9">
        <div id="submit">
          <input type='text' id='submitIp' name='text'><button id='submitBtn'>Submit</button>
        </div>
      </div>
    </div>
  </div>

</body>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54016418

复制
相关文章

相似问题

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