Comments (6)
The backspace/delete issue is only in IE9, the remainder of issues are for making checkboxes and radio buttons magically fire onChange
handlers using onClick
(not a logical choice IMO, since onChange works fine for uncontrolled components and onClick works fine for controlled components), and for some oddities around <select>
inputs that I have yet to observe in Preact (not sure why).
Here's React's onChange abstraction: https://github.com/facebook/react/blob/master/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js
Since Preact tries to avoid browser hacks and legacy APIs whenever possible, I thinking we should move this issue into preact-compat, so we can track progress on it there. preact-compat
doesn't currently have any event normalization, but I think we're going to need at least a rudimentary solution in order to have consistency when pulling in third party libraries.
from preact.
The only normalization React does for onChange
is for checkboxes - I find that confusing, since otherwise events are supposed to just work like DOM events, but they have invented new semantics for checkboxes.
Preact doesn't aim to support IE8 directly, which means you can use the native onInput
event.
Demos here and here.
If this meets your needs, we can close the issue. Let me know!
from preact.
Hm. That's not quite right. onChange
is something they do in a non-standard, but very helpful way.
For example, the following component will live-update the label as you type (assuming that updateValue is a function that updates the redux state or whatevs):
function Example({value, updateValue}) {
return (
<div>
<label>Value is {value}</label>
<input onChange={e => updateValue(e.target.value)} value={value} />
</div>
)
}
See their docs here as a reference: https://facebook.github.io/react/docs/forms.html
Preact is a really impressive accomplishment, by the way! I forgot to mention that. :)
from preact.
@chrisdavies Right, yes my explanation was off with regards to the event timing. That said though, the behaviour React awkwardly patches into onChange
is exactly exactly how onInput
works, isn't it?
Seems better to just use onInput
, though I'm making a note that preact-compat
should probably be normalizing onChange
how React does.
from preact.
preact-compat
does seem like a good place to stick it.
Here's a working example:
https://jsfiddle.net/69z2wepo/33832/
It's not quite the same as onInput
as that behaves inconsistently across browsers. Some ignore delete/backspace, etc. I'm not 100% aware of all the differences, but I think React does a little cross-browser normalization magic in its onChange hijacking.
from preact.
@chrisdavies I'm going to close this issue since there is now preactjs/preact-compat#20. Cheers!
from preact.
Related Issues (20)
- Implement onscrollend event attribute for TypeScript JSX
- TypeScript JSX focus events don't have consistent case HOT 5
- Typescript issues in 10.19.4+ with @mui/material HOT 5
- Provide a boundary between Components and DOM HOT 8
- `preact` `10.9.4+` requires double click or move pointer out of `@headlessui/react` `Tab` panel/button HOT 2
- Unmount hooks should be called during the commit phase to ensure consistency with React HOT 2
- When I attempt to extend HTMLAttributes every intrinsic element becomes of type any HOT 2
- Current plan for event types? HOT 3
- onFocusIn and onFocusOut events incorrectly set HOT 4
- Cannot read properties of undefined (reading '__m')
- `hydrate` doesn't replace attributes at root replaced node HOT 4
- Unable to use hooks in compiled package
- Compatibility issue: Jest mock works in React / fails in Preact when using ForwardRef in a component HOT 2
- Using useState leads to error: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading '__H') HOT 3
- Render mui cache inside shadow dom leaves style sheets in head and content unstyled HOT 2
- `defaultValue` incorrectly (?) diffed against prerendered HTML
- Preact 10.20 + @mui/x-data-grid v7 causes datagrid to appear multiple times in dev-mode, but not in preview-mode HOT 1
- Performance of unmounting a context provider
- Runtime error when using an external react module HOT 5
- Incorrect namespacing of MathML elements
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from preact.