来自 dnd-kit 的侦听器干扰了 input:checkbox 的 onChange 事件

listeners from dnd-kit are interfering with the input:checkbox's onChange event

提问人:Kazi Shariful Islam 提问时间:11/3/2023 更新时间:11/22/2023 访问量:71

问:

来自 dnd-kit 的侦听器干扰了 input:checkbox 的事件onChange

当我使用 input:checkbox 事件时,dnd-kit 会干扰 onchange 事件。侦听器在输入(我检查了 input:checkbox 和 input:radio)元素中禁用 onchange 事件。如果我删除/禁用/commnet-out {...listeners} input:checkbox 事件工作正常。 但我需要两个{...listeners} 和 onchange 事件,因为没有我无法实现拖放。onchange{...listeners}{...listeners}

我尝试的代码如下:

<div
            {...attributes}
            {...listeners}
            ref={setNodeRef}
            style={style}
            className={styles.itemWrapper}
        >
            <div
                className={styles.item}>
                <img src={item.image} alt="Image title goes here..." />
                <input type="checkbox" id={item.id.toString()}
                    onChange={() => {
                        console.log('checked/unchecked') // doesn't print in console
                        handleSelection(item.id)
                    }}
                />
                <label htmlFor={item.id.toString()} ></label>
            </div>
        </div>

**如果我禁用onchange事件工作正常**{...listeners}

<div
            {...attributes}
           // {...listeners} // disabled
            ref={setNodeRef}
            style={style}
            className={styles.itemWrapper}
        >
            <div
                className={styles.item}>
                <img src={item.image} alt="Image title goes here..." />
                <input type="checkbox" id={item.id.toString()}
                    onChange={() => {
                        console.log('checked/unchecked') // print in console 
                        handleSelection(item.id)
                    }}
                />
                <label htmlFor={item.id.toString()} ></label>
            </div>
        </div>
<div
            {...attributes}
            {...listeners}
            ref={setNodeRef}
            style={style}
            className={styles.itemWrapper}
        >
            <div
                className={styles.item}>
                <img src={item.image} alt="Image title goes here..." />
                <input type="checkbox" id={item.id.toString()}
                    onChange={() => {
                        console.log('checked/unchecked') // on change event should work with {...listenters enabled}
                        handleSelection(item.id)
                    }}
                />
                <label htmlFor={item.id.toString()} ></label>
            </div>
        </div>
reactjs 输入 拖拽 dnd-kit

评论


答:

1赞 ever nothing 11/22/2023 #1

也许你应该尝试防止鼠标事件在输入事件处理程序中冒泡,我遇到过类似的问题,希望它也对你有用