Skip to content

inconsistent errors with order of props (or w/ spread) for an input type=file #2532

@5P5

Description

@5P5

Describe the bug

The order of props or assign via spread matters for an input of type file!

solid breaks with cryptic error message on Firefox:
Uncaught DOMException: An attempt was made to use an object that is not, or is no longer, usable
Chrome is a bit more specific but the cause is probably still wrong:
Uncaught InvalidStateError: Failed to set the 'value' property on 'HTMLInputElement': This input element accepts a filename, which may only be programmatically set to the empty string.

Your Example Website or App

https://playground.solidjs.com/anonymous/c911bd45-b39a-4ea9-ac68-b1598e0173f7

Steps to Reproduce the Bug or Issue

change in the playground and check console

with just all spread
switch(1) works
switch(2) breaks

no spread, but both break!
switch(3)
switch(4)

spread and type assign
switch(5) works
switch(6) breaks

switch(8) works
switch(9) works

Expected behavior

order of props/spread should not matter 🤪

Screenshots or Videos

No response

Platform

[email protected]/es2022
Chromium 138.0.7204.183
Firefox 142.0b9

Additional context

source code for example
import { render } from "solid-js/web";
const InputA=(props)=><input {...props}/>

const InputB=(props)=><input value={props.a} type={props.a} />
const InputC=(props)=><input type={props.a} value={props.a} />

const InputD=(props)=><input {...props} type={props.a} />
const InputE=(props)=><input type={props.a} {...props}  />

switch(1){
case 1:render(() => <InputA value="file" type="file" />, document.getElementById("app")!);break;
case 2:render(() => <InputA type="file" value="file" />, document.getElementById("app")!);break;

case 3:render(() => <InputB a="file" />, document.getElementById("app")!);break;
case 4:render(() => <InputC a="file" />, document.getElementById("app")!);break;

case 5:render(() => <InputD type="file" value="file" />, document.getElementById("app")!);break;
case 6:render(() => <InputE type="file" value="file" />, document.getElementById("app")!);break;

case 8:render(() => <input value="file" type="file" />, document.getElementById("app")!);break;
case 9:render(() => <input type="file" value="file" />, document.getElementById("app")!);
}

Metadata

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