2015-10-21 115 views
0

我想我需要在这里建议。我不知道我是否以正确的方式做这件事。所以我有从数据库中提取的这个输入字段值(选项表)。根据输入字段更改输入字段值php

<!-- input to get amount of people --> 
      <tr> 
       <th scope="row"><?php _e('How many people do you want to add?', 'keeping-points'); ?></th> 
       <td> 
        <input type="text" size="15" name="posk_options[ppl_amount]" value="<?php _e($options['ppl_amount'], 'keeping-points'); ?>" /> 
       </td> 
      </tr> 

      <?php dlaugh_ppl_names(); ?> 

用户类型有多少,他们希望有输入字段和下面的函数(dlaugh_ppl_names)用户将创建的形式提交的输入字段。它通过一个for循环来创建字段的数量。

function dlaugh_ppl_names() { 

    $options = get_option('posk_options'); 
    $name_num = $options['ppl_amount']; 
    for($i=0;$i < $name_num; $i++) { 

     $point = "txt_" . $i; 
     $name_build = $point . "_name"; 
     $point_total = $point . "_point_total"; 
     $name_print = $options[$name_build]; 
     $changed_name = str_replace(' ', '_', $name_print); 
     $point_build = "point_total_" . $changed_name; 

     if ($options[$name_build] == "") { 
      $set_points = $name_num - $i; 
      echo $i; 
      $final_ppl = $name_num - $set_points; 
      $options['ppl_amount'] = $final_ppl; 
      $options[$name_build] = null; 
      if ($options[$name_build] == null) { 
       $options[$point_total] = null; 
      } 
      $options = array_filter($options); 
      update_option('posk_options', $options); 
      break; 
     } 

     if ($options[$name_build] == true) { 

     ?> 
        <!-- Add Person Name --> 
        <tr> 
         <th scope="row"> 
         <?php if ($options[$name_build] == "") { 
          _e('Person ' . $i + 1, 'keeping-points'); ?> 
          <?php } else 
          _e($options[$name_build], 'keeping-points'); 

          ?> 
          </th> 
         <td> 
          <input type="text" size="20" name="posk_options[<?php echo $name_build ?>]" value="<?php _e($options[$name_build], 'keeping-points'); ?>" /> 
          <input type="text" size="10" name="posk_options[<?php echo $point_build; ?>]" value="<?php _e($options[$point_build], 'keeping-points'); ?>" /> 
         </td> 
        </tr> 
     <?php 
     } 
    } 

     for($i=0;$i < $name_num; $i++) { 

     $point = "txt_" . $i; 
     $name_build = $point . "_name"; 
     $point_total = $point . "_point_total"; 
     $name_print = $options[$name_build]; 
     $changed_name = str_replace(' ', '_', $name_print); 
     $point_build = "point_total_" . $changed_name; 

     if ($options[$name_build] == false && $options[$name_build] == null) { 

     ?> 
        <!-- Add Person Name --> 
        <tr> 
         <th scope="row"><?php _e('Person' . ' ' . ($i + 1), 'keeping-points'); ?></th> 
         <td> 
          <input type="text" size="20" name="posk_options[<?php echo $name_build ?>]" value="<?php _e($options[$name_build], 'keeping-points'); ?>" /> 
          <input type="hidden" name="posk_options[<?php echo "point_total_" . $name_print ?>]" value="<?php _e($options[$point_build], 'keeping-points'); ?>" /> 
         </td> 
        </tr> 
     <?php 
     } 

    } 


} 

创建字段后,输入控件ppl_amount将显示用户创建了多少个字段。 (可以说类型15,按下提交,字段被创建,然后15仍然存在)。我希望15在那里,但在提交时,我希望15根据实际填写的名称的多少个输入字段进行更改。假设他们输入了15 ...然后只填写了5,那么15值就会变成5。代码我有工作,但我的问题是价值15重新发布作为人选择的号码,但如果我刷新页面然后字段将按我的预期工作。所以我希望根据dlaugh_ppl_names()函数填充的输入数量来更改ppl_amount。

希望它不是太混乱。感谢您的任何建议!我想在每个输入字段被填写后有一个Ajax调用来刷新页面,但这真的很烦人。我填充就像有一个简单的答案,我只是想念。

回答

0

我发现的最佳解决方案是向人物输入添加一个类,然后计算填充了多少个输入字段,然后将该值与输入字段中的问题进行比较。这样,它会根据填充的输入数量动态更新该字段值。我将很快发布一个链接到完成的WordPress插件,以防万一您想要完整的演示。

使用Ajax

jQuery(document).ready(function($){ 
     $('.people').blur(function() { 
     var data = { 
        'action': 'points_action' 
       }; 

       // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php 
       $.post(ajaxurl, data, function(response) { 
       var searchCount = $('.people').filter(function(){ 
        return $(this).val(); 
       }).length; 
       $('#ppl_amount').val(searchCount); 
       }); 
     }); 

});