laravel Livewire未捕获(在promise中)DOMException with select

ux6nzvsh  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(79)

我在我的组件中有一个下拉列表,它似乎导致了Livewire中的错误。
Uncaught(in promise)DOMException:无法在“元素”上执行“setAttribute”:“?”不是有效的属性名称。
我根据我在疑难解答部分的文档中读到的内容添加了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>

字符串

wgeznvg7

wgeznvg71#

你这里有个错字

@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;
}

tf7tbtn2

tf7tbtn22#

我也遇到过同样的错误--就我而言,它是通过在一个经过身份验证的上下文中调用livewire组件来解决的--它失败是因为它正在调用login(作为从一个guest上下文调用的结果)。
如果它不为你工作,请忽略,但它整理了我。

相关问题