【问题标题】:Dynamically created button in table per row in jquery在 jquery 中的每行表中动态创建按钮
【发布时间】:2017-08-03 15:35:23
【问题描述】:

只有第一行正在更新。我能够创建一个动态创建的选择标签和按钮,但每次我选择下拉菜单时,只有第一行正在更新,其他行只会提醒“选择第一个”,即使我已经选择了一个选项。

jquery 函数'

$('input').each(function(){
   if($(this).attr("type")=="button"){
     $(this).click(function{
       var empid=$('#emp').val();
       var job=$('#jobselect').val();
       if(job !== "NULL"){
         $.ajax({
           type:"POST",
           url:"<?php echo base_url(); ?>userskills/update",
           data:{'Emp_ID':empid,'Job':job},
           cache: false;
           success:
           function(data){
             alert("Updated!");
           }
         });
       }else{
         alert("Choose first");
       }
     });
   }
});

这是我在桌子上的身体

<tbody>
  <?php foreach($job as $temp): ?>
  <tr>
    <td><?php echo $temp->Name?></td>
    <td><?php echo $temp->Group?></td>
    <td><?php echo $temp->Section?></td>
    <td>
     <select id="jobselect">
      <?php foreach($roles as $role): ?>
      <option value="<?php echo $role->RoleID">"><?php echo $role->RoleName?></option>
      <?php endforeach; ?>
     </select>
     <input type="hidden" id="emp" value="<?php echo $temp->JobID?>" />
     <input type="button" id="update"/>
   </td>
  </tr>
  <?php endforeach; ?>
</tbody>

【问题讨论】:

    标签: php jquery codeigniter


    【解决方案1】:

    id 属性在文档中应该是唯一的,因此您当前的代码会创建无效的 HTML。浏览器不会对此感到太困扰,并且无论如何都会显示您的元素,但是在 JS 中,如果您按元素 ID(如 '#jobselect')进行选择,您只能返回具有该 ID 的 first 元素.

    您应该改用普通的class,然后在您的JS 中使用DOM 导航从单击的按钮(由this 引用)到使用.closest() 的相关控件以获取包含@987654328 @ 元素,然后 .find() 以获取该 td 中的项目:

    $('input[type="button"]').click(function(){ // no need for .each()
       var container = $(this).closest('td');         // 1. get common parent element
       var empid = container.find('.emp').val();      // 2. note the use of .find() with
       var job = container.find('.jobselect').val();  //    class selectors here
       if (job !== "NULL") {
         $.ajax({
           type:"POST",
           url:"<?php echo base_url(); ?>userskills/update",
           cache: false;
           success:
           function(data){
             alert("Updated!");
           }
         });
       } else {
         alert("Choose first");
       }
    });
    
    <tbody>
      <?php foreach($job as $temp): ?>
      <tr>
        <td><?php echo $temp->Name?></td>
        <td><?php echo $temp->Group?></td>
        <td><?php echo $temp->Section?></td>
        <td>
         <select class="jobselect">
          <?php foreach($roles as $role): ?>
          <option value="<?php echo $role->RoleID">"><?php echo $role->RoleName?></option>
          <?php endforeach; ?>
         </select>
         <input type="hidden" class="emp" value="<?php echo $temp->JobID?>"
         <input type="button" class="update"/>
       </td>
      </tr>
      <?php endforeach; ?>
    </tbody>
    

    请注意,如果您将选择器更改为仅获取作为按钮的输入元素,则根本不需要 .each() 循环。

    【讨论】:

    • 它提醒我它已更新!但是当我检查数据库时,该值为 null..
    • 哦,抱歉,我认为您的 Ajax 已经在工作,但我现在看到它根本没有传递字段。向 Ajax 选项对象添加 data 属性。
    • 现在终于好了.. Arigatou Gozaimasu :)
    • 是的,$row 在我的答案的原始版本中,但我在几分钟后进行了编辑(然后再次编辑以将变量名称更改为 container,因为我将其更改为使用父 td 元素而不是父 tr 元素,尽管两者都有效)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2020-02-12
    • 2016-06-30
    • 2014-03-30
    • 2012-10-19
    • 2013-02-08
    相关资源
    最近更新 更多