Comments (2)
This means they cannot be used to target elements that may not be present, unlike their equivalent jQuery functions.
While I don't disagree with having a configuration setting that the Author can use to disable the DOM macro's default behaviour, I do think it's important to point out one major difference between the macro's and the jQuery element search functions.
And that is that the functions return an Array of elements that met the criteria. whose length can be checked to determine if the search failed. Where as the macros themselves don't allow the Author the same type of check, thus the need for an error message.
from sugarcube-2.
Yes, I agree that there is a strong argument for the warning error being the default, just that a "don't warn me" mode would greatly expand the macros usefulness.
I remember using this back in the day:
<<if $(selector).length>>
<<addclass 'selector' 'class'>>
<</if>>
Which fetches the selected items twice and offers no benefit over the simple <<run $(selector).addClass('class')>>
. And this assumes the end user even knows about checking for $(selector).length
.
Separate but related issue:
I assume most no elements matched the selector
errors arise from trying to affect elements in a passage that isn't yet loaded. In which case the error is still very hard to diagnose for novice coders.
I see two possible solutions:
- Queue DOM changes that happen during rendering until
:passagedisplay
(most user-friendly, might be very problematic when it comes to timing). - Provide a more verbose error message if no elements are found during rendering, something like
The desired element(s) is likely not yet in DOM, you should try delaying the macro call with <<done>>
.
from sugarcube-2.
Related Issues (20)
- Update `Dialog` API to allow multiple instances?
- Quick Accessibility option with the `<<type>>` macro speed? HOT 2
- ``` ``` seems to be discarded by 2.37.0 alpha 17 HOT 2
- Add a method to make truly modal Dialog elements HOT 3
- Unused code in develop/State.prngCreate HOT 3
- Link markup does not recognize HTML Symbol entities HOT 2
- Add setting to reduce impact of expired moments HOT 2
- Provide a way to halt future navigation HOT 6
- bookmark information missing from documentation for v2.37.0 HOT 1
- Suggestion: improve warning for Save size in 2.37.0 docs.
- Twine stacks multiple versions of file when you import to web version, export, then import to desktop version. HOT 3
- Missing `Engine.show()` after `unmarshallForSave()` is called. HOT 5
- Config.passages.transitionOut bug
- feat: allow errors to propagate extra information upstream
- Please enhancd docs to include example Setting ChangeHandler HOT 7
- <<do>> tags not processing comments properly. HOT 1
- Please add to the documentation what content is allowed in "desc:" strings
- Document when done macros are run in the Navigation Event section. HOT 9
- Verbatim String as macro argument HOT 2
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 sugarcube-2.