select 的 Livewire 未捕获(承诺)DOMException

Livewire uncaught (in promise) DOMException with select

我的组件中有一个下拉菜单似乎导致 Livewire 出错。

Uncaught (in promise) DOMException: Failed to execute 'setAttribute' on 'Element': '?' is not a valid attribute name.

我根据我在故障排除部分的文档中阅读的内容添加了 wire:key 代码,但它似乎没有帮助。它更新保存时的值,就像它应该的那样,但是当它用新数据刷新 dom 时,它不起作用。

这是有问题的元素:

<div class="mb-3 col-md-4 ">
    <label for="state" class="form-label">State</label>
    <select wire:model.defer="location.state" class="form-select" 
        id="state" name="state">
        @foreach ($states as $state)
            <option 
                name="{{ $state->name }}" 
                id="{{ $state->code }}" 
                wire:key="{{ $state->id }}"
                value="{{ $state->code }}"
                @if (isset($location->state) 
                    && $location->state === $state->code) ? selected @endif
            >{{ $state->name }}
            </option>
        @endforeach
    </select>
</div>

你这里有错字,

@if (isset($location->state) && $location->state === $state->code) 
    ? selected 
@endif

它尝试将 ? 作为元素的属性应用,但 ? 不是有效属性。只需删除 ?.


也就是说,您不能在 Livewire 中的 <select> 元素上使用 selected 属性 来设置所选值。您需要在组件中设置 wire:model 的值。这意味着您必须从您的 Blade 中完全删除 @if(..) selected @endif,而是在您的组件中设置值,

public function mount() {
    $this->location['state'] = $state->code;
}