Alpine JS изменяет значение метки / текстового поля на основе выбранной опции

#javascript #alpine.js

#javascript #alpine.js

Вопрос:

Возможно ли изменить значение метки и текстового поля на основе опции выбора в AlpineJS?

При загрузке страницы я бы хотел, чтобы опция выбора была local , а надпись ниже была «Определить», а значение текстового поля было «определить здесь», но если кто-то выберет remote , то метка будет читать «Удаленное определение», а значение текстового поля будет «удаленное определение здесь».

Возможно ли это с AlpineJS? У меня есть следующий код;

 <div>
    <label for="location">Location</label>
    <div>
        <select id="location">
            <option value="local">Local</option>
            <option value="remote">Remote</option>
        </select>
    </div>
</div>

<div>
    <label for="define">Define</label>
    <input id="define" type="text" autocomplete="off">
</div>
 

Ответ №1:

С Alpine.js вы можете использовать x-model для 2-полосной привязки ввода / выбора (2-полосная, потому что обновление значения в состоянии компонента / JS обновит ввод / выбор, а изменение ввода / выбора обновит состояние / значение компонента в JS). Вы можете использовать x-model для обработки location обновлений значений. Обратите внимание, что вам нужен завершающий элемент с x-data на нем.

Alpine.js также предоставляет способ установки text ( x-text ) и привязки к произвольным атрибутам x-bind , в вашем случае вы хотите установить значение заполнителя таким x-bind:placeholder образом.

Полностью:

 <form x-data="{ location: 'local' }">
<div>
    <label for="location">Location</label>
    <div>
        <select id="location" x-model="location">
            <option value="local">Local</option>
            <option value="remote">Remote</option>
        </select>
    </div>
</div>

<div>
    <label for="define" x-text="location === 'local' ? 'Define' : 'Remote Define'"></label>
    <input id="define" type="text" autocomplete="off" x-bind:placeholder="location === 'local' ? 'define here' : 'remote define here">
</div>
</form>