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

Alpine.js:如何让x-model使用data属性而非输入框value值

解决方法

你可以通过两种方式实现需求,无需在option上直接设置x-data,而是通过监听选择事件或预存变体数据来同步包装规格:

方法一:读取option的data属性

修改代码,将x-model绑定到变体ID,通过change事件获取选中option的data-packSize值来更新显示的包装规格:

<form x-data="{ selectedVariant: '{{product.variants[0].id}}', packSize: '{{product.variants[0].packSize}}' }">

  <select x-model="selectedVariant" @change="packSize = $event.target.options[$event.target.selectedIndex].dataset.packSize">
    <option value="variant1" data-packSize="30">variant 1 title</option>
    <option value="variant2" data-packSize="20">variant 2 title</option>
  </select>

  Pack of <span x-text="packSize"></span> items

</form>

关键修改点:

  • 将x-model从packSize改为selectedVariant,用来绑定选中的变体ID
  • 添加@change事件监听选择变化,通过$event.target获取当前选中的option,读取其dataset.packSize值更新packSize变量

方法二:预存变体规格到Alpine状态

如果不想操作DOM,可以把变体ID和对应包装规格提前存在x-data的对象中,通过选中的ID直接匹配规格:

<form x-data="{ 
  variants: {
    'variant1': 30,
    'variant2': 20
  },
  selectedVariant: '{{product.variants[0].id}}',
  packSize: '{{product.variants[0].packSize}}'
}" @change="packSize = variants[selectedVariant]">

  <select x-model="selectedVariant">
    <option value="variant1">variant 1 title</option>
    <option value="variant2">variant 2 title</option>
  </select>

  Pack of <span x-text="packSize"></span> items

</form>

关键修改点:

  • 在x-data里定义variants对象,键为变体ID,值为对应的包装规格
  • 监听change事件,通过variants[selectedVariant]直接获取对应规格更新packSize

这两种方法都能实现选择变体后实时切换包装规格的需求,第二种方法避免了DOM操作,更符合Alpine.js的状态驱动理念。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:31:01