为了账号安全,请及时绑定邮箱和手机立即绑定

在循环中选择动态元素 id

在循环中选择动态元素 id

PHP
GCT1015 2022-11-04 17:33:26
我是 js 和 jquery 的新手,需要一些帮助。我有通过 php 从数据库返回的数据,例如:foreach ($form as $value) {  $input = '<input type="number" id="tbpersentase'.$i.'" min="0" max="100" value="'.$value->persentase.'" title="Progres">';  $inputdnone = '<input type="number" id="persentase'.$i.'" min="0" max="100" value="'.$value->persentase.'">'; //this input should not appear in view  $i++;} $row = '<input type="number" id="formJum" value="'.$i.'">';我想要的 html 结果可能是这样的:<input id="tbpersentase0" value="myVal"><input id="persentase0" value="myVal"><input id="tbpersentase1" value="myVals"><input id="persentase1" value="myVals">...// and so on as many as the data retrieve from db<input id="formJum" value="rowCount">在我的项目中,需要在id='"tbpersentase"$i'用户更改输入值时,然后输入id='"persentase"$i'值更改为任何id='"tbpersentase"$i'值。我使用这样的一些代码:var formJum = $('#formJum').val();for(i=0; i<formJum; i++){  $('#tbpersentase'+i).change(function(){    var tbpersentase = $(this).val();    $('#persentase'+i).val(tbpersentase);  })}浏览器没有给我任何错误,所以我认为我的代码已经完成。但是当我用相同id='"tbpersentase"$i'的元素id='"persentase"$i'值更改输入值时,i它不会改变。我的整个元素代码如下所示:<div class="col-sm-7 px-0 reportsForApps d-none">  <div class="px-3">    <table class="table dttables" id="dtForm"> // data-tables client side processing      <thead class="d-none">        <tr>          <th class="d-none">-</th>          <th class="d-none">-</th>        </tr>      </thead>      <tbody id="inputform">        // #tbpersentase goes here for user input ..      </tbody>    </table>    <div id=""> // this doesnt appear to user page    <input type="number" id="formJum" value="">    </div>    <div id="inputProgres"> // this doesnt appear to user page      // #persentase goes here ..    </div>  </div></div>ajax设置的所有值和元素。知道我与我的代码有什么关系吗?谢谢你
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

您可以使用class作为选择器,因为这对于多个元素可以是相同的。使用 jQuerydata存储索引。


$i=0;                                                                           

foreach ($form as $value) {

    $input = '<input type="number" class="percentage" data-index="'.$i.'" value="'.$value->persentase.'" min="0" max="100" title="Progres">';

    $inputdnone = '<input type="number" id="persentase'.$i.'" min="0" max="100" value="'.$value->persentase.'">'; //this input should not appear in view

    $i++;                                                                                 

}

在 jQuery 部分,不需要使用循环,只需为percentage类编写更改函数。只要输入的值发生更改,就会触发此操作:


$(".reportsForApps").on("change", ".percentage", function(){ // 'parentElementId' should be replaced with actual parent element id.

    var tbpersentase = $(this).val(); 

    var index = $(this).data("index");

    $('#persentase'+index).val(tbpersentase);                                       

});


查看完整回答
反对 回复 2022-11-04
?
慕村225694

TA贡献1880条经验 获得超4个赞

添加数据类型 attrdata-group="tbpersentase"并在您的函数中调用它


$input = null;

$inputdnone = null;


foreach ($form as $key => $value) { // you could also use $key value for increment

    $input .= '<input type="number" data-group="tbpersentase" id="tbpersentase'.$key.'" min="0" max="100" value="'.$value.'" title="Progres">';

    $inputdnone .= '<input type="hidden" id="persentase'.$key.'" min="0" max="100" value="'.$value.'">'; //this input should not appear in view

}

 // place in html to echo results of dynamically created inputs from DB info

 <?=$input?>

 <?=$inputdnone?>


// JQuery 3.4.1

$( "input[data-group='tbpersentase']" ).change(function() {

  var $this = $(this).val(); // get users value of the changing input field

  var tbpersentaseID = $(this).attr('id'); // get the changing input fields ID so we can remove IDs alpha chars

  var getID = tbpersentaseID.replace(/[^0-9]/g,''); // declare a new variable containing the numbers for the selected ID

  var persentaseID = 'persentase' + getID; // Concatenate desired alpha ID name to selected key value 


  $("#"+persentaseID).val($this); // set value


});

在 chrome 中测试并将 的值更改为#persentase输入的值,#tbpersentase但保留原始 ID 在#persentase. 希望这是您想要实现的目标。

//img1.sycdn.imooc.com//6364dc9a0001157308250577.jpg

此外,如果您想知道从 DB 中获得了多少行,请count()在 php.ini 中使用。

$form_count = count($form);


查看完整回答
反对 回复 2022-11-04
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您必须使用 change() 函数对每个 #formJum 值更改执行该代码。

如果您在每次输入更改中正确处理这些事件处理程序,也会更好。


查看完整回答
反对 回复 2022-11-04
  • 3 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信