initial commit
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
# FormValidator Silent Failure Pattern
|
||||
|
||||
**The bug:** A `FormValidator` is initialized with element IDs that don't match the actual HTML. Every `document.getElementById()` returns `null`. The validator's `validateForm()` silently returns `false` on every call. The save function is never reached. No error, no notification — just nothing.
|
||||
|
||||
**Where it happened:** Edit Service modal (`#service-edit-modal-quote`) in quote-tab-manager.js
|
||||
|
||||
**The mismatch:**
|
||||
|
||||
| Validator expected | Actual HTML ID |
|
||||
|-------------------|----------------|
|
||||
| `service-edit-form` | `service-edit-form-quote` |
|
||||
| `service-edit-name` | `service-edit-name-quote` |
|
||||
| `service-edit-price` | `service-edit-price-quote` |
|
||||
| `service-edit-recommendation` | `service-edit-recommendation-quote` |
|
||||
|
||||
The Edit Service modal HTML uses `-quote` suffixed IDs to distinguish from the Settings modal's elements. The validator was written for the Settings modal's naming convention.
|
||||
|
||||
**Fix:** For the Edit Service modal, bypass the FormValidator entirely and call `saveServiceEdit()` directly. The save function has its own robust validation with user-visible error notifications. The FormValidator is optional visual feedback, not a required gate.
|
||||
|
||||
**Prevention:** When adding a new modal or form, audit all three layers:
|
||||
1. HTML element IDs
|
||||
2. JS `getElementById()` lookups (check for `||` fallback chains)
|
||||
3. Any validators that reference those IDs
|
||||
|
||||
Create a simple grep check:
|
||||
```bash
|
||||
# List all element IDs referenced in JS that don't exist in HTML
|
||||
grep -oP "getElementById\('([^']+)'\)" quote-tab-manager.js | sort -u | while read line; do
|
||||
id=$(echo "$line" | grep -oP "(?<=')[^']+(?=')")
|
||||
grep -q "id=\"$id\"" repair-orders.html || echo "MISSING in HTML: $id"
|
||||
done
|
||||
```
|
||||
Reference in New Issue
Block a user