У меня есть скрипт проверки, который проверяет атрибуты data- *, чтобы определить, какие поля являются обязательными. Если элемент имеет атрибут «data-required-if» (в качестве значения имеет селектор jQuery), он проверяет, найдены ли какие-либо элементы, соответствующие этому селектору. Если они найдены, поле обязательно для заполнения. Это делает что-то похожее на следующее:
$('[data-required-if]').each(function () {
var selector = $(this).attr('data-required-if'),
required = false;
if ( !$(selector).length ) {
required = true;
// do something if this element is empty
}
});
Это прекрасно работает, но есть проблема. Когда вы используете селектор атрибута для фильтрации на основе текущего значения текстового поля, он действительно фильтрует начальное значение текстового поля.
<input
type='text'
id='myinput'
value='initial text'
/>
<input
type='text'
id='dependent_input'
value=''
data-required-if="#myinput[value='']"
/>
// Step 1: type "foobar" in #myinput
// Step 2: run these lines of code:
<script>
$('#myinput').val() //=> returns "foobar"
$('#myinput[value="foobar"]').length //=> returns 0
</script>
Я понимаю, почему он это делает. JQuery, вероятно, использует getAttribute () в фоновом режиме. Есть ли другой способ фильтрации на основе текущего значения поля ввода с использованием чисто селекторов jQuery?