You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP循环中动态添加外部JS按钮,AJAX响应正常但输入框无法填充

问题:循环生成的多语言输入框,外部JS注入按钮无法完成AJAX填充

我需要给跟着语言(en、fr等)循环生成的输入框旁添加按钮,点击按钮调用PHP AJAX接口,将返回内容填充到对应输入框。内嵌JavaScript时功能正常,但改用外部注入脚本后,AJAX能获取响应,却无法填充输入框。

核心代码展示

生成输入框的PHP循环代码

<?php
for ($i = 0, $n = \count($languages); $i < $n; $i++) {
?>
<div class="row" id="productsSeoTitle<?php echo $i ?>">
  <div class="col-md-12">
    <div class="form-group row">
      <label for="<?php echo $Products->getDef('text_products_page_title'); ?>"
             class="col-1 col-form-label"><?php echo $Products->getDef('text_products_page_title'); ?></label>
      <div class="col-md-4 input-group" id="products_head_title_tag<?php echo $i; ?>">
        <?php echo '&nbsp;' . HTML::inputField('products_head_title_tag[' . $languages[$i]['id'] . ']', SeoAdmin::getProductsSeoTitle($pInfo->products_id, $languages[$i]['id']), 'maxlength="70" size="77" id="products_head_title_tag_' . $i . '"', false); ?>
      </div>
    </div>
  </div>
</div>
<?php } ?>

外部注入的PHP/JS代码

// 循环生成多语言相关变量
for ($i = 0, $n = \count($languages); $i < $n; $i++) {
  $this->app->loadDefinitions('Module/Hooks/seo_title');
  $question = $this->app->getDef('text_seo_page_title_question', $languages[$i]['id']);
  $seo_page_title[$i] = $question .  $ProductsAdmin->getProductsName($id, $languages[$i]['id']);
  // 输出为JS变量
  echo "var seo_page_title_$i = '".addslashes($seo_page_title[$i])."';\n";
}

// 构造按钮HTML
$content .= '<button type="button" class="btn btn-primary btn-sm" id="submit-button-' . $i . '">';
$content .= '<i class="bi-chat-square-dots" title="' . $this->app->getDef('text_seo_page_title') . '"></i>';
$content .= '</button>';

// 生成注入脚本
$output = <<<EOD
<script defer>
$('[id^="products_head_title_tag"]').append('{$content}');
</script>

<script defer>
$(document).ready(function() {
  $('[id^="submit-button-"]').click(function() {
    // 提取按钮ID中的索引
    let index = this.id.match(/\d+/)[0];
    
    let message = "{$seo_page_title[0]}"; 
    let ajax = $("#ajax").val();

    $.post("{$url}", {message: message, ajax: ajax}, function(data) {
      $("#output-input").val(data);
      $("#products_head_title_tag_" + index).val(data); 
    });
  });
});
</script>
EOD;
return $output;

问题现象

执行后AJAX请求能正常获取响应数据,但对应索引的输入框始终无法被填充。

排查进展

已经确认问题和循环变量$i相关:移除循环,固定使用$i=0时,输入框填充功能恢复正常。修改后的测试代码片段:

//      for ($i = 0, $n = \count($languages); $i < $n; $i++) {
$this->app->loadDefinitions('Module/Hooks/ClicShoppingAdmin/seo_title');
$question = $this->app->getDef('text_seo_page_title_question', $languages[0]['id']);
$seo_page_title[0] = $question .  $ProductsAdmin->getProductsName($id, $languages[0]['id']);
echo "var seo_page_title_0 = '".addslashes($seo_page_title[0])."';\n";
//    }

希望得到解决方法,让循环生成的所有按钮都能正确填充对应输入框。


内容的提问来源于stack exchange,提问作者Mira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:27:19