【问题标题】:How to change x-bind:value before displaying - Alpine JS如何在显示前更改 x-bind:value - Alpine JS
【发布时间】:2021-01-12 13:31:02
【问题描述】:
<div x-data="{ date : false }">
      <input type="date" name="dateOne" id="dateOne" x-model="date">
      <input type="date" name="dateTwo" id="dateTwo" x-bind:value="date">
</div>

现在,我该如何更改#dateTwo,所以一旦#dateOne 发生更改,我会提前一天显示#dateTwo,我已经知道要创建一天并在JavaScript 中再添加一个。但我的麻烦在于如何将它与 Alpine JS 粘合在一起的逻辑。

场景:有一个事件有一个开始和一个结束日期,但我想强制使用至少提前一天选择。所以我的想法是这样的,只要用户在第一个输入上选择一天,第二个输入上的 x-bind 就会添加并显示提前一天

提前致谢。

【问题讨论】:

  • 嗨卢卡斯,欢迎来到 Stackoverflow!你的问题不够清楚!什么时候需要发生什么?用例是什么?
  • 场景:有一个事件有一个开始和一个结束日期,但我想强制使用至少提前一天选择。所以我的想法是,一旦用户在第一个输入中选择一天,第二个输入上的 x-bind 就会添加并显示提前一天
  • @KarimTarek,还编辑了问题。我希望现在逻辑有点干净

标签: javascript html alpine.js


【解决方案1】:

模型/数据缺少几个值,我的方法与您的方法有点不同,我认为第一次约会不需要x-model,在第二次约会中使用更有意义。 以下是针对您的用例的快速而肮脏的解决方案:

<div x-data="{ 
  dateStart: null,
  dateEnd: null,
  initEndDate: function(dateStartInputValue) {
    const selectedDate = new Date(dateStartInputValue); 
    const dateEndInitValue = selectedDate.setDate(selectedDate.getDate() + 1);
    this.dateEnd = new Date(dateEndInitValue).toISOString().split('T')[0];
  }
}">
  <label for="start">
    Start date:
    <input 
      name="dateStart" 
      type="date" 
      @change="dateStart = event.target.value; initEndDate(event.target.value)" 
    />
  </label>
  <label for="dateEnd" x-show="dateStart">
    – End date:
    <input 
      name="dateStart" 
      type="date" 
      x-model="dateEnd"
      @change="dateEnd = event.target.value;" 
    />
  </label>
</div>

这是sandbox 中的代码。

祝你好运!

【讨论】:

  • 感谢您的回答。没有脏代码,只有适用于特定情况的代码,在我看来,你的代码是一个杀手。
  • 谢谢卢卡斯!您需要考虑的一种情况是用户在初始日期选择之后更改开始日期,因为这将触发结束日期的更改,这在上面的代码中没有考虑。如果您在我对upvoted 的回答中发现有价值的信息,我们将不胜感激,谢谢!
猜你喜欢
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
相关资源
最近更新 更多