jQuery установить, затем прочитать только для чтения attr на текстовое поле - PullRequest
5 голосов
/ 14 сентября 2010
​<input id="test" type="text" value="text" />​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

alert(​$(':input:not([readonly])').length);​​​​​​​​​​​​​​​​​ // 1

$('#test').attr('readonly', 'readonly');

alert($(':input:not([readonly])').length); // 1

$('#test').removeAttr('readonly');​​​​​​​​​​

alert($(':input:not([readonly])').length); // 1

В дополнение к вопросу здесь , я не могу заставить работать решение, потому что кажется, что jQuery не устанавливает атрибут readonly правильно (или по крайней мере последовательно).

Обратите внимание, я получаю те же результаты с $('#test').attr('readonly', true);

Я использую Chrome, а атрибут readonly отображается как readonly="". Здесь есть еще один пост, в котором говорится, что FireFox делает то же самое.

Меня это не сильно беспокоит, поскольку текстовое поле все еще мешает редактированию, но я не могу найти способ обнаружить атрибут readonly.

Обычно я люблю jQuery, но все это немного WTF.

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 14 сентября 2010

Лично я бы не использовал removeAttr () ... Я бы просто присвоил ему значение false с помощью attr ().

Вы можете просто запросить свойство в обычном режиме:

if ($("#X").attr("readonly"))
{
    execute code
}

Кроме того, вы можете продолжать использовать removeAttr (), а затем просто использовать длину для определения свойства:

if (!$("#X").attr("readonly").length)
{
    execute code
}

Если вы беспокоитесь о селекторе, вы должны сделать синтаксис селектора следующим образом: :not([readonly='readonly']) edit: Я вижу, что это уже было в цитируемом вами ответе.

0 голосов
/ 22 марта 2013

Я думаю, что даже если вам удастся отключить ввод программно с помощью Javascript, умный пользователь сможет изменить его, если отключит JavaScript браузера. Поэтому для безопасности лучше всего перезагрузить значение на стороне вашего сервера.

...