You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Store ID动态切换Store Machine下拉选项问题排查求助

问题排查与修正方案

我帮你找出了代码里的几个关键问题,咱们来逐个解决:

存在的问题点

  • 链式调用被打断:每个case里的.append($('<option value="Master">Master</option>'));末尾多了分号,这会直接终止jQuery的链式调用,导致后续的.append语句报错。
  • switch结构错误default分支写在了switch的大括号外面,属于语法错误,必须放在switch的代码块内部才能生效。
  • 函数闭合错误:代码最后一行的}};多了一个大括号,正确的闭合应该是});来结束DOM就绪函数。
  • readonly输入框的事件触发隐患:你的store_idreadonly状态,用户无法手动修改它的值,如果是通过JS代码赋值,change事件不会自动触发,需要手动调用trigger('change')来触发逻辑。

修正后的完整代码

HTML部分(无需修改)

<tr>
  <td> <b>Store ID</b> <br> </td>
  <td> <input type="number" id="store_id" readonly> <br> </td>
</tr>
<tr>
  <td> <b>Machine</b> <br> </td>
  <td>
    <select name="select-native-3" id="store_machine" data-iconpos="left">
      <option value="Master">Master</option>
      <option value="Slave">Slave</option>
    </select> <br>
  </td>
</tr>

JavaScript部分

$(function() {
  // 把需要显示Slave的store_id放到数组里,方便维护
  const allowedStoreIds = ["1425427806", "1452469394", "1489455419", "1415643163"];

  $('#store_id').on('change', function() {
    const storeId = $(this).val();
    $('#store_machine').empty(); // 先清空下拉框

    if (allowedStoreIds.includes(storeId)) {
      // 符合条件的ID,显示空选项+Master+Slave
      $('#store_machine')
        .append($('<option value=""></option>'))
        .append($('<option value="Master">Master</option>'))
        .append($('<option value="Slave">Slave</option>'));
    } else {
      // 其他情况,显示提示选项+Master
      $('#store_machine')
        .append($('<option value="">Select Machine</option>'))
        .append($('<option value="Master">Master</option>'));
    }
  });

  // 如果你是通过JS给store_id赋值,需要手动触发change事件,比如:
  // $('#store_id').val("1425427806").trigger('change');
});

额外说明

我把重复的case逻辑改成了数组判断,这样后续需要添加新的store_id时,直接往allowedStoreIds数组里加就行,不用再写重复的switch分支,代码更简洁易维护。

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

火山引擎 最新活动