javascript - 当我有一个隐藏字段(如果选择一个选项时会显示该字段)时,我无法获取选择元素的值

标签 javascript jquery html forms

我有一个带有各种选项的选择表单元素。其中一个选项是“其他”。因此,当选择“其他”时,会显示一个隐藏字段,供用户输入列表中没有的值。一切都很好。问题是当用户选择任何其他选项并提交表单时,该值不会被传递。然而,如果选择“其他”选项并填充文本框然后提交表单,则传递文本框的值。

这是选择和隐藏文本字段:

<select name="memo" required class="newtxtbox" id="memo" onchange='checkvalue()'>
  <option disabled="disabled" selected="selected">Select</option>
  <option value="Donation for Bulletin">Bulletin</option>
  <option value="Donation for Care Ministry">Care Ministry</option>
  <option value="Donation for Cathedral Choir">Cathedral Choir</option>
  <option value="Donation for Other">Other - (please specify below) </option>
</select>

<input type="text" style="display:none" name="memo" id="other">

这是 JavaScript:

function checkvalue()       
{
    if(document.getElementById('memo').value == 'Donation for Other') {
               document.getElementById('other').style.display='block';
    }
    else {
       document.getElementById('other').style.display='none'; 
    }
}

我确信我错过了一些小东西,但不知道它是什么。

最佳答案

这是一个小型解决方法的直观示例。我所做的只是更改每个元素的 name 属性。我添加了一条 CSS 规则,将 name="memo" 元素显示为蓝色。蓝色元素将被发送到服务器。

我还扩展了 javascript 代码,以便您可以在此处进行测试。您不必在代码中的 //添加用于测试目的 之后包含代码。单击“运行代码片段”并尝试提交按钮。

function checkvalue() {
  var select = document.getElementById('memo');
  var input = document.getElementById('other');

  if (select.value == 'Donation for Other') {
    document.getElementById('other').style.display = 'block';
    select.name = '';
    input.name = 'memo'; // form `memo` will now contain this input 
  } else {
    document.getElementById('other').style.display = 'none';
    select.name = 'memo';
    input.name = '';
  }
}

// added for testing purpose
document.getElementById('test').addEventListener('submit', function(e) {
  e.preventDefault(); // no no submit

  // FormData is HTML5 js object that contains ... data from the form ...
  var fd = new FormData(this);

  // .entries() isn't widely supported yet.
  for (var tuple of fd.entries()) {
    console.log(tuple[0] + ' contains value "' + tuple[1] + '"');
  }
});
/* 
   added this for visibility of changes
    element that is blue is being sent
*/

input[name="memo"],
select[name="memo"] {
  background-color: lightblue;
}
<form id="test">
  <select name="memo" required class="newtxtbox" id="memo" onchange='checkvalue()'>
  <option disabled="disabled" selected="selected">Select</option>
  <option value="Donation for Bulletin">Bulletin</option>
  <option value="Donation for Care Ministry">Care Ministry</option>
  <option value="Donation for Cathedral Choir">Cathedral Choir</option>
  <option value="Donation for Other">Other - (please specify below) </option>
</select>

  <input type="text" style="display:none" id="other">

  <input type="submit" value="submit" />
</form>

关于javascript - 当我有一个隐藏字段(如果选择一个选项时会显示该字段)时,我无法获取选择元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44493859/

相关文章:

javascript - 如何检查 html 页面上是否已加载 google 标签

html - IE 中页面顶部的背景图像,而不是背景

javascript - 识别使用 Braintree dropin ui 进行购买的客户

javascript - Canvas 上基于文本的倒计时

javascript - jQuery 通过带重音字符的 id 搜索 div

javascript - 从对象访问任意属性

javascript - 当我刷新页面时,数据自动存储在数据库中

javascript 数组索引测试

带有 getJSON 和回调的 jQuery Promise

javascript - 单击菜单后使非 Bootstrap 导航栏展开