首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动完成在动态创建的输入字段jQuery上不起作用

自动完成在动态创建的输入字段jQuery上不起作用
EN

Stack Overflow用户
提问于 2019-11-21 15:02:53
回答 3查看 192关注 0票数 0

我面临着在动态创建的字段上自动完成的问题。

如附件图片所示,我通过单击加号创建了动态字段,第一行的自动完成功能正常工作,但其余的动态生成的自动完成功能不起作用。自动补全的代码是

代码语言:javascript
运行
复制
  $(".account_code").dropdown({
      onChange: function (val) {
        var id=val;
        var dataString = 'id='+ id +'&type=account_code';
        alert(dataString);
        $.ajax
          ({
            type: "POST",
            url: "include/ajax_data.php",
            data: dataString,
            dataType: 'json',
            cache: false,
            success: function(data)
              {
                console.log(data);
                $("#account_description").val(data.value);
              } 
          });
      }
  });

动态行插入代码是

代码语言:javascript
运行
复制
 function add_row()
  {
   $rowno=$("#bank_payment_voucher tr").length;
   $rowno=$rowno+1;
   $("#bank_payment_voucher tr:last").after('<tr id="row'+$rowno+'"><td><div class="field"><select class="ui search dropdown account_code" id="account_code'+$rowno+'" name="account_code[]"><option value="">Select Code</option><?php foreach (get_lookups($data_code) as $key => $value){ ?><option value="<?php echo $value['code']; ?>"><?php echo $value['code']." | ".$value['description']; ?></option><?php } ?></select></div></td><td><div class="field"><input type="text" name="account_description[]" id="account_description'+$rowno+'" placeholder="Account Description" autocomplete="" value="" required=""></div></td><td><div class="required field"><input type="text" name="remarks[]" id="remarks'+$rowno+'" placeholder="Remarks" autocomplete="off" value="" required=""></div></td><td><div class="required field"><input type="text" name="cheque_number[]" id="cheque_number'+$rowno+'" placeholder="Cheque Number" autocomplete="off" value="" required=""></div></td><td><div class="field"><div class="ui fluid action input"><input type="number" name="amount[]" id="amount'+$rowno+'" placeholder="Amount" autocomplete="off" value=""><div class="ui green icon button"><i class="pk flag"></i> PKR</div></div></div></td><td><div class="field"><div class="ui fluid action input"><i class="minus circle icon red" onclick=delete_row("row'+$rowno+'") style="font-size: 2.5em; cursor: pointer;"></i></div></div></td></tr>');
  }

控制台也没有显示任何错误。

要求是:在每个动态行上,有一个固定的下拉列表,并根据从下拉列表中选择的值,自动填充其余的表单域

请帮我解决这个问题

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-29 18:55:06

我只是通过下面的代码来实现的

代码语言:javascript
运行
复制
$(document).ready(function(){

 $(document).on('keydown', '.account_code', function() {

  var id = this.id;
  var splitid = id.split('_');
  var index = splitid[1];

  // Initialize jQuery UI autocomplete
  $( '#'+id ).autocomplete({
   source: function( request, response ) {

    $.ajax({
     url: "include/ajax_data.php",
     type: 'POST',
     dataType: "json",
     cache: false,
     data: {search: request.term,request:1},
     success: function( data ) {
      //console.log(data);
      response( data );
     }
    });
   },
   select: function (event, ui) {

    $(this).val(ui.item.code); // display the selected text
    var bank_code_id = ui.item.id; // selected value
    //console.log(bank_code_id);
    // AJAX
    $.ajax({
     url: 'include/ajax_data.php',
     type: 'post',
     cache: false,
     data: {bank_code_id:bank_code_id,request:2},
     dataType: 'json',
     success:function(response){

      var len = response.length;

      if(len > 0){

       var id = response[0]['id'];
       var description = response[0]['description'];
       // Set value to textboxes
       document.getElementById('lookupcodeid_'+index).value = id;
       document.getElementById('accountdescription_'+index).value = description;

      }

     }
    });

    return false;
   }
  });
  });
});
票数 0
EN

Stack Overflow用户

发布于 2019-11-21 15:11:37

当您运行此命令时:

代码语言:javascript
运行
复制
 $(".account_code").dropdown({
    ... 
});

您将在DOM中查找具有类account_code的所有元素,并为它们分配一个行为和事件,在使用dropdown功能时将触发该行为。

这段代码可能会首先运行。因此,当您添加具有相同类的更多元素时,它们永远不会获得该行为的赋值。

因此,在add_row函数中,您需要做的不仅是创建元素并附加它,还需要附加要在dropdown上运行的事件。

您可以使用此方法重新分配行为:https://api.jquery.com/on/#on-events-selector-data-handler

或者,您也可以将第一个代码片段(赋值行为)封装在函数中,这样每次添加新的动态元素时都可以再次触发它。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2019-11-21 15:15:35

看看这是否有帮助。

代码语言:javascript
运行
复制
$(document).ready(function() {
    var max_fields      = 10; //maximum input boxes allowed
    var wrapper         = $(".input_fields_wrap"); //Fields wrapper
    var add_button      = $(".add_field_button"); //Add button ID
    
    var x = 1; //initlal text box count
    var availableAttributes = [
	  "account_address",
	  "account_address_city",
	  "account_address_country",
	  "account_address_state",
	  "account_address_street1",
	  "account_address_street2",
	  "account_address_zip",
	  "account_email",
	  "account_login",
	  "account_name",
	  "account_number",
	  "account_telephone"
    ];
    
    
    
    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
            x++; //text box increment
            $(wrapper).append('<div><input type="text" name="mytext[]"/><a href="#" class="remove_field">Remove</a></div>'); 
            
            $(wrapper).find('input[type=text]:last').autocomplete({
                source: availableAttributes
            });	
            //add input box
        }
    });
    
    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); $(this).parent('div').remove(); x--;
    })
    
    $("input[name^='mytext']").autocomplete({
		source: availableAttributes
	});	
    
});

// autocomplete enablement
代码语言:javascript
运行
复制
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="input_fields_wrap">
    <button class="add_field_button">Add More Fields</button>
    <div><input type="text" name="mytext[]"></div>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58969056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档