getAttribute() не получает исходное значение отключено
Код в следующем фрагменте демонстрирует, что после изменения disabled
атрибут, я не могу получить исходное значение атрибута, по крайней мере, для disabled
приписывать. Документы JQuery подразумевают, что element.getAttribute()
должен быть в состоянии получить исходное значение.
Тем не менее, он не обнаруживает, что select
изначально не был отключен.
Так что, документы не так? Отличаются ли логические атрибуты? Самое главное, есть ли способ получить исходное значение после того, как оно было изменено с prop()
?
ПРИМЕЧАНИЕ Я использую jQuery 1.8.3, и он интерпретируется Chromium 37 в Opera.
$('button').on('click', function() {
var $inputs = $('input, select');
$inputs.each(function() {
var $this = $(this);
var name = $this.prop('name');
console.log('before changing ' + name + '...');
console.log("\tgetAttribute: " + $this[0].getAttribute('disabled'));
console.log("\tprop: " + $this.prop('disabled'));
console.log("\tattr: " + $this.attr('disabled'));
$this.prop('disabled', true);
console.log('after changing ' + name + '...');
console.log("\tgetAttribute: " + $this[0].getAttribute('disabled'));
console.log("\tprop: " + $this.prop('disabled'));
console.log("\tattr: " + $this.attr('disabled'));
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<button>Click</button>
<input name="input" type="text" disabled='disabled' />
<select name="select">
<option>Option</option>
<option>Option</option>
<option>Option</option>
</select>
РЕДАКТИРОВАТЬ
К сожалению, вопрос в .prop() и.attr() на самом деле не отвечает на вопрос, когда речь идет о булевых свойствах, таких как отключен. Рассмотрим эту скрипку: http://jsfiddle.net/garreh/uLQXc. Работает нормально под 1.8.3. Теперь рассмотрим этот форк, который заменяет "отключен" вместо "бла": http://jsfiddle.net/wrn1ryjq/1. Вход изначально НЕ отключен. После изменения даже атрибут attr возвращает значение "отключено". Таким образом, стандартный ответ, что attr возвращает исходное значение, не кажется верным. Мой вопрос остается в силе: после изменения его с помощью prop, как я могу узнать исходное состояние инвалидов?
РЕДАКТИРОВАТЬ Ну, это смущает. Конечно attr()
не получит исходное значение. Документы говорят, что это не так. Реальный вопрос заключается в том, как получить исходное значение отключено из входа после отключения с помощью prop
,
К сожалению, согласно этому комментарию, это невозможно: / Спасибо за предложения, хотя.
1 ответ
Поскольку, prop
работает только тогда, когда элемент имеет это свойство, вы не получите никакого значения, возвращаемого им, когда дело доходит до тех полей ввода, которые не отключены.
Та же проблема с использованием attr
так как он проверял бы, чтобы элемент имел этот конкретный атрибут.
Вместо этого я бы предложил вам использовать $('#someId:disabled').length
чтобы увидеть, имеет ли элемент, который вы ищете, отключенный атрибут с ним или нет. Селектор сможет найти только те элементы, которые имеют disabled
приписать им, и, следовательно, это приведет либо к 0
или 1
,
Смотри эту скрипку.
HTML
<input id="input1" disabled />
<input id="input2" disabled="true" />
<input id="input3" />
Javascript
$('#result').append($('#input1:disabled').length);
$('#result').append($('#input2:disabled').length);
$('#result').append($('#input3:disabled').length);