Skip to content

Commit 12dc469

Browse files
committed
Fix visibility (make it like jquery)
1 parent fe8631a commit 12dc469

File tree

5 files changed

+31
-24
lines changed

5 files changed

+31
-24
lines changed

dist/client-side-validations.esm.js

Lines changed: 2 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/client-side-validations.js

Lines changed: 2 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/utils.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,7 @@ export const isInputElement = (element) => {
6161
}
6262

6363
export const isVisible = (element) => {
64-
if (element.type === 'hidden' || element.hidden) {
65-
return false
66-
}
67-
68-
const style = window.getComputedStyle(element)
69-
return style.display !== 'none' && style.visibility !== 'hidden'
64+
return Boolean(element.offsetWidth || element.offsetHeight || element.getClientRects().length)
7065
}
7166

7267
export const isValuePresent = (value) => {

test/javascript/public/test/form_builders/validateForm.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,30 @@ QUnit.test('Disabled inputs do not stop form submission (async)', function (asse
158158
}, 250)
159159
})
160160

161+
QUnit.test('Inputs inside hidden containers do not stop form submission (async)', function (assert) {
162+
var done = assert.async()
163+
var form = document.getElementById('new_user')
164+
var input = document.getElementById('user_name')
165+
var label = form.querySelector('label[for="user_name"]')
166+
var hiddenContainer = document.createElement('div')
167+
168+
hiddenContainer.hidden = true
169+
form.insertBefore(hiddenContainer, input)
170+
hiddenContainer.appendChild(input)
171+
hiddenContainer.appendChild(label)
172+
173+
form.requestSubmit()
174+
175+
setTimeout(function () {
176+
var iframe = document.querySelector('iframe')
177+
var response = iframe && iframe.contentDocument && iframe.contentDocument.querySelector('#response')
178+
179+
assert.ok(response)
180+
assert.notOk(input.parentElement.classList.contains('field_with_errors'))
181+
done()
182+
}, 250)
183+
})
184+
161185
QUnit.test('Decorative (without name) inputs aren\'t validated (async)', function (assert) {
162186
var done = assert.async()
163187
var form = document.getElementById('new_user')

vendor/assets/javascripts/rails.validations.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
* Client Side Validations JS - v23.1.0 (https://github.com/DavyJonesLocker/client_side_validations)
2+
* Client Side Validations JS - v24.0.0 (https://github.com/DavyJonesLocker/client_side_validations)
33
* Copyright (c) 2026 Geremia Taglialatela, Brian Cardarella
44
* Licensed under MIT (https://opensource.org/licenses/mit-license.php)
55
*/
@@ -89,11 +89,7 @@
8989
}
9090
};
9191
const isVisible = element => {
92-
if (element.type === 'hidden' || element.hidden) {
93-
return false;
94-
}
95-
const style = window.getComputedStyle(element);
96-
return style.display !== 'none' && style.visibility !== 'hidden';
92+
return Boolean(element.offsetWidth || element.offsetHeight || element.getClientRects().length);
9793
};
9894
const isValuePresent = value => {
9995
return !/^\s*$/.test(value || '');

0 commit comments

Comments
 (0)