javascript - 在 HTML 下拉菜单中更改项目时激活文本框

标签 javascript php html

我正在尝试执行以下操作:

我有一个包含四个选项的下拉菜单。当我选择 Shipped 时,应该启用一个文本框。所以我尝试了以下方法:

<div class="col-md-3"> 
    <select class="form-control" id="ostatus" name= "ostatus">      
        <option value="Uploaded" <?php if ($dispatch_status == "Uploaded") echo "selected='selected'";?> >Uploaded</option>
        <option value="Processing" <?php if ($dispatch_status == "Processing") echo "selected='selected'";?> >Processing</option>
        <option value="Dispatched" <?php if ($dispatch_status == "Dispatched") echo "selected='selected'";?> >Dispatched</option>
        <option value="Shipped" <?php if ($dispatch_status == "Shipped") echo "selected='selected'";?> >Shipped</option>                                                                                
    </select>
</div>                                    
</div>
<input type="text" class="form-control" name="shipping_notes"  disabled="true" id="shipping_notes" aria-describedby="" placeholder="Enter Shipping details">

Java 脚本:

<head>  
<script type="text/javascript">
    document.getElementById('ostatus').addEventListener('change', function() 
    {
        console.log(this.value);

        if (this.value == 'Shipped') {
            document.getElementById('shipping_notes').disabled = false;   
        } else {
            document.getElementById('shipping_notes').disabled = true;
        }
    });
</script>
</head>

好像没有触发?我也没有在控制台上看到登录。这里可能出了什么问题?

更新:

我把html代码贴在这里:

https://justpaste.it/6zxwu

最佳答案

更新

既然你现在已经分享了你的其他代码,我想我知道你想要什么。您有多个模态框,每个模态框都有一个select 列表和shipping_notes 文本框,当该特定模态框的选择为Shipped 时应启用它们。我已经修改了您的 HTML 以使其正常工作。

我已经稍微更新了您的 HTML。您有多个具有相同 ID 的元素。 HTML ID 应该是唯一的。如果您想定位多个元素,使用 class(或 data-)属性会更安全。我已将 class="order-status" 添加到每个 select 并将 class="shipping_notes_txt" 添加到每个文本框。我用过 element.querySelector()document.querySelectorAll()选择 DOM 元素。

下面的代码片段模仿了两个模态框。当 select 更新时,它只会启用/禁用同一 form 元素中的文本框。

// wait for the DOM to load
document.addEventListener('DOMContentLoaded', function() {

  // get all select elements with class=order-status
  var selects = document.querySelectorAll('.order-status');

  // iterate over all select elements
  for (var i = 0; i < selects.length; i++) {
    // current element
    var element = selects[i];

    // add event listener to element
    element.addEventListener('change', function() 
    {
      console.log(this.value);	

      // get the form closest to this element
      var form = this.closest('form');

      // find the shipping notes textbox inside form and disable/enable
      if (this.value == 'Shipped') {
        form.querySelector('.shipping_notes_txt').disabled = false;   
      } else {
        form.querySelector('.shipping_notes_txt').disabled = true;
      }
    });

    // default value if status == Shipped: enable textbox
    if (element.value == "Shipped")
    {
      var form = element.closest('form');
      form.querySelector('.shipping_notes_txt').disabled = false;
    }
  }		
});
.modal1 { 
  display:inline-block;
  vertical-align:top; 
  padding: .5em;
  padding-bottom:5em;
  border: 1px solid black;
}
<div class="modal1">  
  <h3>First Modal</h3>
  <div id="edit1" class="modal fade" role="dialog">
    <form action="order.php" autocomplete="off" method="post">
      <div class="col-md-2 ml-3 pt-1">
        <label for="role" class="mr-3">Status</label>
      </div>
      <select class="form-control order-status" id="ostatus1" name= "ostatus">
        <option value="Uploaded" selected='selected' >Uploaded</option>
        <option value="Processing">Processing</option>
        <option value="Dispatched">Dispatched</option>
        <option value="Shipped">Shipped</option>
      </select>
      <input type="text" class="form-control shipping_notes_txt" name="shipping_notes" disabled="true" id="shipping_notes1" aria-describedby="emailHelp" placeholder="Enter Shipping details">
    </form>
  </div>
</div>
		
<div class="modal1">    
  <h3>Second Modal</h3>
  <div id="edit20" class="modal fade" role="dialog" >
    <form action="order.php" autocomplete="off" method="post">
      <div class="col-md-2 ml-3 pt-1">
        <label for="role" class="mr-3">Status</label>
      </div>
      <select class="form-control order-status" id="ostatus20" name= "ostatus">
        <option value="Uploaded" >Uploaded</option>
        <option value="Processing">Processing</option>
        <option value="Dispatched">Dispatched</option>
        <option value="Shipped" selected='selected' >Shipped</option>
      </select>
      <input type="text" class="form-control shipping_notes_txt" name="shipping_notes" disabled="true" id="shipping_notes20" aria-describedby="emailHelp" placeholder="Enter Shipping details">
    </form>
  </div>
</div>

关于javascript - 在 HTML 下拉菜单中更改项目时激活文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58142826/

相关文章:

javascript - 响应地垂直居中div

javascript - 未捕获的异常 : [CKEDITOR. editor] 实例已经存在

javascript - 使用 jQuery 淡出文本字段内的文本值

javascript - 在 iOS 上将视频流式传输到浏览器

php - 如何使用 Laravel 5.4 注销并重定向到登录页面?

PHP - 特定的 if/or 语句

php - MySQL 的 session 处理程序困难

html - div需要水平居中,完全占据垂直空间

javascript - 如何在没有滚动条(实际滚动)的情况下增加滚动上的数字?

html - 如何在 CSS 中创建静态页脚?