【问题标题】:How to change when value get selected选择值时如何更改
【发布时间】:2019-05-13 01:49:29
【问题描述】:

如果用户选择了不同的选项,我想更改结果。结果是我从 db 获得的表

<select name="categories" id="categories" onchange="admSelectCheck(this);" class="form-control">
<option >Tabel</option>
<option value="t_sediam">Tabel Sedia</option>
<option value="t_brg">Tabel Barang</option>     
</select>

这个JS

function admSelectCheck(nameSelect)
{
    console.log(nameSelect);
    if(nameSelect){
        admOptionValue = document.getElementById("categories").value;
        if(admOptionValue == "t_sediam"){
            document.getElementById("admDivCheck").style.display = "block";
        }
        else{
            document.getElementById("admDivCheck").style.display = "none";
        }
    }
    else{
        document.getElementById("admDivCheck").style.display = "none";
    }


    console.log(nameSelect);
    if(nameSelect){
        admOptionValue = document.getElementById("categories").value;
        if(admOptionValue == "t_brg"){
            document.getElementById("tbarang").style.display = "block";
        }
        else{
            document.getElementById("tbarang").style.display = "none";
        }
    }
    else{
        document.getElementById("tbarang").style.display = "none";
    }
}
</script>

这就是触发

<div id="admDivCheck" style="display:none;">
<?php echo"A"; ?>

<div id="tbarang" style="display:none;">
<?php echo"B"; ?>

我期望选择 t_sediam 时的输出,输出为 A。选择 t_brg,输出为 B

【问题讨论】:

  • 何必用document.getElementById("categories"),你已经用nameSelect 引用了&lt;select&gt;。此外,您已经解释了您的预期,但没有解释实际发生的情况
  • @Phil 结果是当我选择 t_sediam 时,它会是 A B。但是如果我选择 t_brg,则没有结果

标签: javascript selectedvalue


【解决方案1】:

这是一种不同的方法,使用事件委托。这非常适合基于数据的场景。

const showData = (showID) => {
  // Hide evenrything
  document.querySelectorAll('.displayData').forEach(d => d.style.display = 'none');
  
  const showEl = document.querySelector(`#${showID}`);
  if(showEl) showEl.style.display = 'block';
}

document.addEventListener('change', (e) => {
  if(e.target.matches('#categories')) {
    switch(e.target.value) {
      case 't_sediam':
        showData('admDivCheck');
        break;
      case 't_brg':
        showData('tbarang');
        break;
      default:
        showData();
    }
  }
});
.displayData {
  display: none;
}
<select name="categories" id="categories" class="form-control">
<option >Tabel</option>
<option value="t_sediam">Tabel Sedia</option>
<option value="t_brg">Tabel Barang</option>     
</select>

<div id="admDivCheck" class="displayData">
   <p>HERE IS SOME DATA</p>
</div>


<div id="tbarang" class="displayData">
  <p>Here is DIFFERENT Data</p>
</div>

【讨论】:

  • 嗨,感谢您的回答。是的,正如我在第一个中所说的那样,您的权利结果是我从 db 获得的表。但我没有将所有这些都复制到我的问题中。无论如何,它仍然无法在我的代码中工作。未定义变量:数据库。我已经定义了数据库,它之前在我的代码中工作过,但结果却不是我所期望的
  • 对不起,当我使用你的代码时。答案是,如果我选择 t_sediam,显示 A 和 B。如果我选​​择 t_brg,显示空白
  • 哦,很容易解决。等一下`
  • 不,我建议您在此之前回答。我的意思是,我的预期结果是,如果我选择 t_sediam,显示 A。如果我选​​择 t_brg,显示 B。我在编辑之前使用您的代码,这里是正确的。但它在我的代码中仍然是错误的。您可以像以前一样再次更改答案,我会让您正确
  • 好的,我已经恢复原样了。
【解决方案2】:

还有更简单的做法:

document.getElementById('categories').onchange = function() 
{
  document.getElementById('admDivCheck').style.display =  (this.value=='t_sediam') ? "block" : "none";
  document.getElementById('tbarang').style.display     =  (this.value=='t_brg') ? "block" : "none";
}
<select name="categories" id="categories"  class="form-control">
  <option >Tabel</option>
  <option value="t_sediam">Tabel Sedia</option>
  <option value="t_brg">Tabel Barang</option>     
</select>

<div id="admDivCheck" style="display:none;">A</div>
<div id="tbarang"     style="display:none;">B</div>

我猜你是否想分解可能性?

const
  SelCategorie = document.getElementById('categories'),
  elmDisplay   = document.querySelectorAll('.ClassTabels');


SelCategorie.onchange = function() 
{
  for (let i = 0; i < elmDisplay.length; i++ )
  {
    elmDisplay[i].style.display = (elmDisplay[i].id === this.value ) ? 'block' : 'none';
  }
}
.ClassTabels {
  display: none;
}
<select name="categories" id="categories"  class="form-control">
  <option >Tabel</option>
  <option value="admDivCheck">Tabel Sedia</option>
  <option value="tbarang">Tabel Barang</option>     
  <option value="truc">Tabel truc</option>     
  <option value="bidule">Tabel bidule</option>     
</select>


<div id="admDivCheck" class="ClassTabels">A</div>
<div id="tbarang"     class="ClassTabels">B</div>
<div id="truc"        class="ClassTabels">C</div>
<div id="bidule"      class="ClassTabels">D</div>

?

【讨论】:

  • 感谢您的回答。当我使用你的代码时。答案是,如果我选择 t_sediam,则显示 A 和 B。如果我选​​择 t_brg,则显示空白。我还是不知道怎么了。无论如何,我从数据库中的表中得出结果(它不是简单的 ABCD)。
猜你喜欢
  • 1970-01-01
  • 2016-02-26
  • 2015-07-05
  • 2023-03-09
  • 2021-08-24
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 2020-03-31
相关资源
最近更新 更多