Skip to content

Can't listen for JS events on <flux:checkbox /> #1146

Open
@dennisfransen

Description

Flux version

v2.0.1

Livewire version

v3.5.20

Tailwind version

v4.0.7

Browser and Operating System

Chrome on macOS

What is the problem?

I tried fixing a checkbox using the hidden native input solution suggested in this issue. #341
This kind of works with with checkboxes and radio buttons.

I tried a similar solution with radio buttons. (Example 1.x) But there i ended up having to update the value with x-on:click event.
So my solution would be to do the same on a checkbox. But it seems like the <flux:checkbox /> component don't emit any events.

Sidenote

This Isn't directly related to this issue, but if this works i think that would solve my initial approach
Example 2.x have the limitation of setting a initial value from an Eloquent model. This might be a AlpineJS issue. Or it might be me, not knowing how to fix this.

Code snippets

Example 1.1 - Does work

<flux:field x-data="{ gender: 'female' }">
    <input
        id="female"
        type="radio"
        name="gender"
        value="female"
        x-model="gender"
        class="hidden"
    />
    <input
        id="male"
        type="radio"
        name="gender"
        value="male"
        x-model="gender"
        class="hidden"
    />
    <input
        id="other"
        type="radio"
        name="gender"
        value="other"
        x-model="gender"
        class="hidden"
    />

    <flux:radio.group variant="segmented" :label="__('Gender')">
        <flux:radio
            id="female"
            value="female"
            :label="__('Female')"
            x-model="gender"
            x-on:click="(e) => gender = e.target.value"
        />
        <flux:radio
            id="male"
            value="male"
            :label="__('Male')"
            x-model="gender"
            x-on:click="(e) => gender = e.target.value"
        />
        <flux:radio
            id="other"
            value="other"
            :label="__('Other')"
            x-model="gender"
            x-on:click="(e) => gender = e.target.value"
        />
    </flux:radio.group>
</flux:field>

Example 1.2

<flux:field x-data="{ gender: 'female' }">
    <input
        id="female"
        type="radio"
        name="gender"
        value="female"
        x-model="gender"
        class="hidden"
    />
    <input
        id="male"
        type="radio"
        name="gender"
        value="male"
        x-model="gender"
        class="hidden"
    />
    <input
        id="other"
        type="radio"
        name="gender"
        value="other"
        x-model="gender"
        class="hidden"
    />

    <flux:radio.group variant="segmented" :label="__('Gender')">
        <flux:radio
            id="female"
            value="female"
            :label="__('Female')"
            x-model="gender"
        />
        <flux:radio
            id="male"
            value="male"
            :label="__('Male')"
            x-model="gender"
        />
        <flux:radio
            id="other"
            value="other"
            :label="__('Other')"
            x-model="gender"
        />
    </flux:radio.group>
</flux:field>

Example 2.1 - Does work

<flux:field x-data="{ isHidden: false }">
    <div class="flex gap-2">
        <input
            class="hidden"
            id="is_hidden"
            type="checkbox"
            name="is_hidden"
            x-model="isHidden"
            x-bind:checked="isHidden"
        />
        <flux:checkbox x-model="isHidden" name="is_hidden" x-bind:checked="isHidden" />
        <flux:label>{{ __('Hidden identity') }}</flux:label>
    </div>
</flux:field>

Example: 2.2 - Doesn't work.

<flux:field x-data="{ isHidden: '{{ $user->is_hidden }}' }">
    <div class="flex gap-2">
        <input
            class="hidden"
            id="is_hidden"
            type="checkbox"
            name="is_hidden"
            x-model="isHidden"
            x-bind:checked="isHidden"
        />
        <flux:checkbox x-model="isHidden" name="is_hidden" x-bind:checked="isHidden" />
        <flux:label>{{ __('Hidden identity') }}</flux:label>
    </div>
</flux:field>

How do you expect it to work?

<flux:field x-data="{ isHidden: '{{ $user->is_hidden }}' }">
    <div class="flex gap-2">
        <input
            class="hidden"
            id="is_hidden"
            type="checkbox"
            name="is_hidden"
            x-model="isHidden"
            x-bind:checked="isHidden"
        />
        <flux:checkbox x-model="isHidden" x-bind:checked="isHidden" x-bind:change="(e) => isHidden = e.currentTarget.checked"/>
        <flux:label>{{ __('Hidden identity') }}</flux:label>
    </div>
</flux:field>

Please confirm (incomplete submissions will not be addressed)

  • I have provided easy and step-by-step instructions to reproduce the bug.
  • I have provided code samples as text and NOT images.
  • I understand my bug report will be closed if I haven't met the criteria above.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions