javascript - Onchange 方法不适用于更改文本框的值

标签 javascript jquery html css

有一个选择框,这个选择框根据每个选择的案例改变文本框的值和属性。和一个名为 add record 的 div 以添加新记录。问题是当一条新记录添加了用于更改文本框的代码不适用于新记录时。有没有办法解决它? 这是我的代码:

$(document).ready(function() {
  $(".add_new").click(function() {
    $(".myform")
    .eq(0)
    .clone()
    .insertAfter(".myform:last")
    .show();
  });
});
$(function(){
  $('select[name=type]').change(function(){
    var $option = $(this).find(":selected");
    $(this).siblings('input.to_validate').attr('pattern', $option.attr('data-pattern'));
    $(this).siblings('input.to_validate').attr('placeholder', $option.attr('data-placeholder'));
    $(this).siblings('input.to_validate').attr('title', $option.attr('data-title'));
  });
});
.to_validate:invalid {
  color: navy;
  outline: none; 
  border-color: #ff1050 !important;
  box-shadow: 0 0 10px #ff0000 !important;
}
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>
<body>
<form method="post" class="myform">
<div>
<select name="type">
    <option value="NS" data-pattern="(?!\d+(?:\.\d+){3}$)(([a-zA-Z\d]|[a-zA-Z\d][a-zA-Z\d-]*[a-zA-Z\d])\.)*([A-Za-z\d]|[A-Za-z\d][A-Za-z\d-]*[A-Za-z\d])" data-placeholder="Hostname" data-title="Wrong!">NS </option>
    <option value="SRV" data-pattern="(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" data-placeholder="IP address" data-title="Wrong!">MX </option>
  </select>

<input type="text" name="content" placeholder="Value"  class="to_validate" value="" />

<button type="submit">submit</button>
</div>
</form>
<div class="add_new">ADD Record</div>





</body>
</html>

最佳答案

已经绑定(bind)的事件对于新添加的元素是不可见的。在您的情况下,您可以绑定(bind)到 document 的事件。当您将事件添加到 document 时,它也会通过脚本为新添加的元素触发。 $(document).on('change', 'select[name=type]', function(){ });

示例

$(document).ready(function() {
  $(".add_new").click(function() {
    $(".myform")
      .eq(0)
      .clone()
      .insertAfter(".myform:last")
      .show();
  });
});
$(function() {
  $(document).on('change', 'select[name=type]', function() {
    var $option = $(this).find(":selected");
    $(this).siblings('input.to_validate').attr('pattern', $option.attr('data-pattern'));
    $(this).siblings('input.to_validate').attr('placeholder', $option.attr('data-placeholder'));
    $(this).siblings('input.to_validate').attr('title', $option.attr('data-title'));
  });
});
.to_validate:invalid {
  color: navy;
  outline: none;
  border-color: #ff1050 !important;
  box-shadow: 0 0 10px #ff0000 !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<form method="post" class="myform">
  <div>
    <select name="type">
      <option value="NS" data-pattern="(?!\d+(?:\.\d+){3}$)(([a-zA-Z\d]|[a-zA-Z\d][a-zA-Z\d-]*[a-zA-Z\d])\.)*([A-Za-z\d]|[A-Za-z\d][A-Za-z\d-]*[A-Za-z\d])" data-placeholder="Hostname" data-title="Wrong!">NS</option>
      <option value="SRV" data-pattern="(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" data-placeholder="IP address" data-title="Wrong!">MX</option>
    </select>
    <input type="text" name="content" placeholder="Value" class="to_validate" value="" />
    <button type="submit">submit</button>
  </div>
</form>
<div class="add_new">ADD Record</div>

关于javascript - Onchange 方法不适用于更改文本框的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41692439/

相关文章:

html - 在 Google Chrome 中使黄色自动完成透明

javascript - 如何检测 google maps PolyLine 叠加层上的点击事件?

javascript - jquery 砌体图像追加

javascript - 类型错误 : Property 'handleEvent' is not callable IN FIREFOX

php - dropzone.js 图片上传接受的MimeTypes

php - 包含基本上是 html 的 php 文件是不好的做法吗?

javascript - 如何通过滑动而不是直接进入网站的一部分?

javascript - Laravel:在 javascript 中使用 url 代替路由

php - MySQL 搜索运算符和 "LIKE"

javascript - 用逗号和小数格式化金额字段