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

如何将WooCommerce多字符AJAX搜索框改造为6个单数字输入框

原有多字符搜索字段效果:
原多字符搜索字段效果

我们需要将其适配为6位单数字输入框,无需修改原有核心检索逻辑,仅需调整前后端交互代码即可,具体实现步骤如下:

适配实现步骤

1. 替换前端输入框代码

把原有的单text输入框替换为6个单数字输入框,效果如下:
6位单数字输入框效果
代码示例:

<!-- 替换原有的keyword输入框 -->
<div class="digit-input-group">
  <input type="number" class="search-digit" min="0" max="9" maxlength="1" data-index="0">
  <input type="number" class="search-digit" min="0" max="9" maxlength="1" data-index="1">
  <input type="number" class="search-digit" min="0" max="9" maxlength="1" data-index="2">
  <input type="number" class="search-digit" min="0" max="9" maxlength="1" data-index="3">
  <input type="number" class="search-digit" min="0" max="9" maxlength="1" data-index="4">
  <input type="number" class="search-digit" min="0" max="9" maxlength="1" data-index="5">
</div>
<div id="datafetch">您输入的数字将在此处展示</div>

2. 修改前端JS逻辑

主要实现两个功能:输入单数字后自动跳到下一个输入框、拼接所有输入值为完整关键词发起AJAX请求,同时修正你原有代码的参数不匹配问题:

// 监听所有数字输入框的输入事件
$('.search-digit').on('input', function() {
  // 限制只能输入1位数字
  if($(this).val().length > 1) {
    $(this).val($(this).val().slice(-1));
  }
  // 输完自动跳到下一个输入框
  const currentIndex = parseInt($(this).data('index'));
  if($(this).val() !== '' && currentIndex < 5) {
    $('.search-digit').eq(currentIndex + 1).focus();
  }
  // 拼接所有输入值为完整关键词
  let fullKeyword = '';
  $('.search-digit').each(function() {
    fullKeyword += $(this).val() || '';
  });
  // 只有关键词长度≥1的时候发起请求,可根据需求调整触发长度
  if(fullKeyword.length >= 1) {
    $.post('<?php echo admin_url('admin-ajax.php'); ?>', 
      {
        'action': 'data_fetch', // 这里要和后端钩子的action名一致,你原来写的my_action是错的
        'keyword': fullKeyword
      },
      function(response){
        $('#datafetch').html(response); // 用html替换原有内容比append更合理,避免结果堆叠
        console.log(response); // 你原来的result变量不存在,修正为response
      }
    );
  } else {
    $('#datafetch').html('您输入的数字将在此处展示');
  }
});

// 可选优化:回删时自动跳回上一个输入框
$('.search-digit').on('keydown', function(e) {
  const currentIndex = parseInt($(this).data('index'));
  if(e.key === 'Backspace' && $(this).val() === '' && currentIndex > 0) {
    $('.search-digit').eq(currentIndex - 1).focus();
  }
});

3. 后端逻辑适配(functions.php)

你原有后端的商品检索逻辑不需要改动,只需确保正确接收前端传的keyword参数即可,修正后的代码:

add_action('wp_ajax_data_fetch' , 'data_fetch');
add_action('wp_ajax_nopriv_data_fetch','data_fetch');
function data_fetch(){
   $myquery = esc_attr( $_POST['keyword'] );
   // 这里保留你原来的WooCommerce商品检索逻辑即可,因为$myquery和之前单输入框传的字符串格式完全一致
   
   // 最后记得要wp_die(),这是WordPress AJAX接口的要求
   wp_die();
}

适配完成后原有搜索逻辑完全复用,和原来单输入框的检索效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:24:04