当前位置: 首页 > 知识库问答 >
问题:

jquery只克隆文本而不克隆不起作用的属性

松飞翮
2023-03-14

我正在研究jquery克隆。其中我有一个div和三个元素。第一个元素是select下拉,第二个是text box,第三个是add Button。当用户单击add按钮时,它就完美地克隆了整个div。但是,如果用户从下拉列表的值中选择为“其他”,则需要启用最接近的文本框,这将是第一次运行良好。如果用户单击“添加”按钮,则文本框应处于禁用模式,因为用户尚未从下拉字段中选择另一个。

这是我的jquery代码

null

$(document).ready(function() {
  $("#btn_add").click(function() {
    $("#duplicate").clone(true).insertAfter("#duplicate");
  });
  $("#txt_select").change(function() {
    if ($(this).find("option:selected").val() == "Other") {
      $("#sel_ipt").find("#sel_ipt").removeAttr("disabled").val('');
    } else {
      $("#sel_ipt").attr("disabled", "disabled");
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
<div id="duplicate">
  <select id="txt_select">
    <option>Select</option>
    <option value="First">First</option>
    <option value="Second">Second</option>
    <option value="Third">Third</option>
    <option value="Other">Other</option>
  </select>
  <input type="text" disabled id="sel_ipt" />
  <input type="submit" id="btn_add" value="Add" />
</div>

null

请引导我

这是我的JSBIN链接

共有2个答案

金理
2023-03-14

首先,由于您正在重复,所以不要使用id,而是使用class

我改变了你的函数,添加了注释,让你明白函数是如何工作的。

null

$( function(){
  $(".btn_add").click(function(){
    // clone the first .duplicate
    var clone = $(".duplicate:first").clone(true);
    // find the text input, change the disabled property and empty the value
    clone.find(".sel_ipt").attr("disabled","disabled").val('');
    // insert after the last .dublicate
    clone.insertAfter(".duplicate:last");
  });
  $(".txt_select").change(function () {
    if ($(this).find("option:selected").val() == "Other") {
      // use next to find the next element with class .sel_ipt
      $(this).next(".sel_ipt").removeAttr("disabled").val('');
    } else {
      $(this).next(".sel_ipt").attr("disabled","disabled");
    }
  }); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="duplicate">
  <select class="txt_select">
    <option>Select</option>
    <option value="First">First</option>
    <option value="Second">Second</option>
    <option value="Third">Third</option>
    <option value="Other">Other</option>
  </select>
  <input type="text" disabled class="sel_ipt" />
  <input type="submit" class="btn_add" value="Add" />
</div>
郦翰学
2023-03-14

ID在DOM中应该始终是唯一的。当您现在克隆时,您有几个#sel_ipt(以及其他)是不正确的。如果你要用这些做一个表单发布,你可能应该跟踪你有多少输入,并在副本中添加一个数字。如id=“sel_ipt_2”name=“sel_ipt_2”。

$(document).ready(function(){

 $(".txt_select").on('change',function () {

   // Find the input in the specific row
   var input = $(this).parent().find('.sel_ipt');

   input.attr("disabled", $(this).val() != "Other").val('');

  /* 
  This is (probably) better for readability

  if ($(this).val() == "Other") {
     input.attr("disabled", $(this).val() == "Other").val('');
   } else {
     input.attr("disabled", true).val('');
   }*/

 }); 

 $("#btn_add").click(function(){

   // Get the parent row for cloning
   var row = $(this).parent();

   // Insert the row after the cloned row
   var clonedRow = row.clone(true).insertAfter(row);

   // Disable and remove value in the cloned row
   clonedRow.find('.sel_ipt').attr('disabled', true).val('');

 }); 
});

这里有一个JS-bin链接

 类似资料:
  • 更新:该错误似乎与我拥有的.babelrc文件有关: 当我移除这个文件时,错误就消失了。 原帖: 我正在使用React与包裹捆绑器。首先,我有一个问题,与我的包裹版本和@babel/preset-env(无效版本:未定义)不兼容有关。 我通过在package.json文件中添加一个resolutions标记来解决问题,以强制使用不需要version对象的以前版本的Babel。这起作用了,但现在我在

  • 在本文章教程中,我们将演示如何使用 命令。 注意:在开始学习本教程之前,先创建一个存储库,有关如何创建存储库,请参考: http://www.yiibai.com/git/git_create_repository.html 进入一个即将用于存放存储库的目录,作为一个演示,这里使用的目录是:D:\worksp,在此目录中,点击右键,在弹出的菜单中选择:Git Bash,如下图所示 - 弹出一个 G

  • 应用克隆 (用于已有服务,需要在另一个业务线下创建一个同样的服务,不需要重新创建) 服务/环境克隆(菜单栏:工具集->服务/环境克隆) 点击菜单栏,在项目列表中筛选您要克隆的项目,然后点击 克隆 ,弹框中选择您要克隆到哪个业务线。 选择目录空间,系统为在目标空间下生成该应用所需要的所有类型资源和Jenkins Job。

  • 我喜欢克隆一个表格,从每个单元格中去掉EUR这个词。我尝试使用.RemoveByContent但得到错误“不是函数”。 这是我的代码: 下面是表格: 如何删除克隆元素中的字符串?

  • 主要内容:示例在某些情况下,您可能需要一个表的完整、精确副本,也即克隆表(复制表)。我们首先想到的是使用 CREATE TABLE 命令创建一张新表,然后使用 SELECT 命令从旧表中选取所有数据,并使用 INSERT 命令插入到新表中。但是这种做法可能达不到您的目的,因为副本必须包含相同的索引、约束、默认值等。 如果您使用 MySQL 数据库,可以借助 SHOW CREATE TABLE 命令,该命令用来展

  • HackerNews 克隆是基于 HN 的官方 firebase API 、Vue 2.0 、vue-router 和 vuex 来构建的,使用服务器端渲染。 Live Demo 注:如果在一段时间内没有人访问过该网站,则需要一些加载时间。 [Source] 特性 服务器端渲染 Vue + vue-router + vuex 服务端数据提前获取 客户端状态 & DOM 合并 单文件 Vue 组件