javascript - 如何使用 Materialise 刷新/更新 Javascript (vanilla) 中的选择?

标签 javascript html select materialize dynamically-generated

我正在尝试使用 Javascript(普通)和 Materialise 来更新选择小部件中的选项。我猜它与“动态生成的选择元素”有关,但我不知道该怎么做?

根据Materialize我可能需要考虑实现:“此外,您将需要单独调用页面生成的任何动态生成的选择元素。”。不幸的是,我不确定(没有找到)如何“动态生成选择元素”来更新/刷新选择小部件?

这是我的相关代码:

HTML

<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<div class = "container">
    <div class="row">
      <div class="input-field col s3">
        <button id = "btn" class="waves-effect waves-light btn-small"><i class="material-icons left">person_add</i>Add</button>
      </div>
      <div class="row">
      <div class="input-field col s3">
        <button id = "btnRemove" class="waves-effect waves-light btn-small"><i class="material-icons left">delete</i>Remove</button>
      </div>
    </div> <!-- CLOSE ROW -->

    <div class="row">
      <div>
        <div style = "position:relative; top:-10px;" class="input-field col s6">
          <select id="voteNoList" onchange="PersonInfo()" required>
            <option value="">Vote Number?</option>
            <!-- <?!= currListNo; ?>
               -->
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
          </select>
        </div>
      </div>
    </div> <!-- CLOSE ROW -->
</div> <!-- CLOSE CONTAINER -->

Javascript(普通)

  //------------
  // AUTO
  //------------
  // Select
  document.addEventListener('DOMContentLoaded', function() {
    var el = document.querySelectorAll('select');
    var instances = M.FormSelect.init(el);
  });

  // Button - Add
  document.getElementById("btn").addEventListener("click", PersonInfo);

  // Button - Remove
  document.getElementById("btnRemove").addEventListener("click", PersonDelete);

  function PersonInfo(){

    debugger;
    var selectobject = document.createElement("option");
    selectobject.text = "Text55";
    selectobject.value = "myvalue55";
    var selectList = document.getElementById("voteNoList");
    selectList.appendChild(selectobject);  
    debugger;
    return;        
  }

  function PersonDelete(){

    debugger;
    var selectobject=document.getElementById("voteNoList");
    for (var i=0; i<selectobject.length; i++){
      if (selectobject.options[i].value == "2"){
         selectobject.remove(i);
        break;
      }
    } 
    debugger;
    return;     
  }

我的期望是有一个选择小部件,它可以根据按钮的按下方式增加和减少选项。 (请注意,为了简单起见,我硬编码为只能添加相同的选项并删除等于 "2" 的选项。)

虽然我无法在 Javascript (vanilla) 中找到解决方案,但我能够找到 jQuery 解决方案,如下所示 link .

我的代码也可以在 CodePen 中找到,在 Debug模式下可以看到 selectList 的不同数字选项在按下按钮时发生变化。

最佳答案

显然,我的情况的解决方案是在return之前添加M.FormSelect.init(selectList);。包含更新/解决方案的代码可在 CodePen 中找到。 .

关于javascript - 如何使用 Materialise 刷新/更新 Javascript (vanilla) 中的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56514502/

相关文章:

mysql - 如何格式化这个 mysql 查询

c++ - Proc*C 应用程序在 Oracle 12.2 中崩溃

javascript - 从元组数组中删除重复的 x 值

javascript - 刷新后如何保留localStorage值?

html - 如何让div占据剩余的垂直空间

javascript - 如何将从 Ajax 请求收到的响应重定向到另一个 html 页面

python - 如何清空python中的套接字?

javascript - 在我的例子中如何将点击事件添加到元素?

javascript - 堆的算法置换 JavaScript 和递归的堆栈?

javascript - jquery函数存在变量问题