Нажав или изменив ввод, отключает другие
$(function() {
$('.disablesothers').on('change focus click', function () {
var $input = $(this).find('input');
var $brothers = $input.parent().siblings('.disablesothers');
console.log($brothers.length);
$input.removeAttr('disabled');
$brothers.find('input').attr('disabled', 'disabled');
});
});
input:disabled {
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label class="overlabel tab_content default tooltip disablesothers" title="Bind text">
<span>Destination name, zone</span>
<input type="text" name="hotel_name">
</label>
<label class="overlabel disablesothers">
<input type="text" name="other_hotels" id="other_hotels">
</label>
Обратите внимание, что я связываю событие на метке, а не на входах,
Но это не работает
Есть идеи почему?
-РЕДАКТИРОВАТЬ-
Это может быть потому, что removeAttr
это на самом деле не удаляет его, просто очищает значение..?
2 ответа
Решение
Я решил добавить прозрачный div, который покрывает метку, когда ввод отключен, потому что некоторые браузеры не будут запускать событие, если это отключенный ввод,
<label class="overlabel disablesothers">
<input type="text" name="other_hotels" id="other_hotels">
</label>
затем,
:checked + div {
display: inline-block;
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
Вам нужно использовать .prop('disabled', true)
вместо .attr('disabled', 'disabled')
:
$(function() {
$('.disablesothers').on('change focus click', function () {
var $input = $(this).find('input');
var $brothers = $input.parent().siblings('.disablesothers');
console.log($brothers.length);
$input.removeAttr('disabled');
$brothers.find('input').prop('disabled', true);
});
});
input:disabled {
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label class="overlabel tab_content default tooltip disablesothers" title="Bind text">
<span>Destination name, zone</span>
<input type="text" name="hotel_name">
</label>
<label class="overlabel disablesothers">
<input type="text" name="other_hotels" id="other_hotels">
</label>
Как документы для .attr() утверждают:
Чтобы получить и изменить свойства DOM, такие как проверенное, выбранное или отключенное состояние элементов формы, используйте метод.prop().