使用带有添加和删除元素条件的 jQuery 克隆表单

Posted

技术标签:

【中文标题】使用带有添加和删除元素条件的 jQuery 克隆表单【英文标题】:Clone Form using jQuery with add and remove elements conditions 【发布时间】:2016-06-26 05:11:13 【问题描述】:

所以,我想克隆我的选择选项表单,当它已经满足条件时(例如,在这种情况下,用户选择 'THEN' 运算符)然后表单将显示一个固定的内容(风险 - 高),隐藏特定链接(添加更多)并显示提交按钮。

困扰我的是,我的代码仅在我选择运算符时才适用于第一种形式。我想要的是,我希望在添加的每个最后一个表单上都执行它。

例如,我需要这样的输出:

如果年龄大且 ldl 高且 hdl 低且 sistolic 高 THEN 风险很高

这是我的代码:

function rule(id_counter) 
  if (id_counter != 0) 
    var abc = $('#var_name' + id_counter).val();
   else 
    var abc = $('#var_name').val();
  

  $.ajax(
    url: 'search_coll.php',
    type: 'post',
    data: 
      selected_item: abc
    ,
    success: function(response) 
      if (id_counter != 0) 
        $('#var_name' + id_counter).html(response);
       else 
        $('#var_name').html(response);
      
    ,
    error: function() 
      console.log('Request failed.')
    
  );
;
$(document).ready(function() 
  var count = 1;
  $('#clone').click(function() 
    var ab = $('#tobecloned').clone();
    ab.find('select').attr('id', function(i, val) 
      return val + count;
    );
    ab.find('.js_variable').attr('onChange', function(i, val) 
      return "rule("+ count +")";
    );

    $('#tab').append(ab);
    count++;
  );
);
<!DOCTYPE html>
<html>

<head>
  <title></title>
</head>

<body>
  <table id="tab">
    <tr id="tobecloned">
      <td>
        <select name="id_var[]" id="var_name" class="js_variable" onChange="rule(0)">
          <option>Choose Variable</option>
          <?php include "../connect.php"; $query_v=m ysqli_query($connection, "SELECT * from variables ORDER BY id_var"); while($result_v=mysqli_fetch_array($query_v, MYSQLI_ASSOC)) ?>
          <option value="<?php echo $result_v['id_var'];?>">
            <?php echo $result_v[ 'var_name'];?>
          </option>
          <?php  ?>
        </select>
      </td>
      <td>
        <select name="coll_name">
          <option>Choose Collection</option>
        </select>
      </td>
      <td>
        <select name="operator">
          <option>Choose Operator</option>
          <option value="AND">AND</option>
          <option value="THEN">THEN</option>
        </select>
      </td>
    </tr>
    <tr id="showifthen">
      <!-- i want to show this, if the user choose THEN from the last appended/cloned select operator -->
      <td>
        <select name="var_name">
          <option>Risk</option>
        </select>
      </td>
      <td>
        <select name="coll_name">
          <option>High</option>
        </select>
      </td>
    </tr>
  </table>
  <a href="#" id="clone">Add More</a> 
  <!-- this should be hidden if user choose THEN -->
  <a type="submit" id="hideatfirst" hidden>Submit</a> 
  <!-- i want this to be hidden at first, and shown when user choose THEN from the last appended/cloned select operator -->

</body>

</html>

感谢之前

【问题讨论】:

@OP,分享解析后的HTML..而不是&lt;?php.... 【参考方案1】:

这里有一些问题。

选择并不都有 ID,因此尝试更新它们的循环会将它们设置为 NaN

但是,您在集合上使用.attr('id'),无论如何它只返回第一个 ID,而不是全部。

要依次对每个元素进行操作,请像这样使用.each()

ab.find('select').each(function() 
  var el = $(this)
  el.attr('id', el.attr('id') + count)
);

为了在选择值更改时采取行动,您需要为其分配一个带有.change() 的更改处理程序,类似于

$('#operator').change(function() 
  operatorSelect($(this))
)

您必须在克隆它们时为每个选择单独分配更改处理程序,并且您可能希望禁用每个先前的操作符选择,这样就不会对更改哪个操作有歧义。

我发现这是一个有趣的小消遣,所以我整理了一个快速小提琴来演示:https://jsfiddle.net/xosqw00p/

【讨论】:

啊,无论如何,禁用选项不会让我发布值。所以,我保持启用:)

以上是关于使用带有添加和删除元素条件的 jQuery 克隆表单的主要内容,如果未能解决你的问题,请参考以下文章

带有标签的JQuery拖放不会克隆节点

JavaScript课程——Day21(jQuery下class操作css操作元素宽高元素的位置滚动条创建.添加.替换.删除.克隆节点事件滑上事件的区别)

如何使用 jQuery 克隆、修改和添加元素?

jQuery clone() FireFox 错误 - 无法提交克隆的表单

JQuery添加元素和删除元素几种方法的区别

jquery拖放和克隆,找到元素的放置位置