Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Снять атрибут disabled (https://javascript.ru/forum/misc/41550-snyat-atribut-disabled.html)

alexmixaylov 18.09.2013 22:29

Снять атрибут disabled
 
Возникла небольшая проблема с формой обратной связи
с помощью нижеприведенного скрипта скрываются\показываются необходимые поля

Чтобы на сервер не уходило ошибочно выбранное значение присваиваю атрибут disabled, но если опять вернуться к выбору этого пункта - атрибут disabled не снимается

Как сделать чтобы инпут опять становился активным?

$('#from').live('change', function () {
    if ($('#from').val() == 'address') {
        $('#infoaddress').show();
       // эта конструкция не работает $('#infoaddress').removeAttr("disabled");
        
    } else {
        $('#infoaddress').hide();
        $('#infoaddress input').attr("disabled","disabled");
 
    }

ruslan_mart 19.09.2013 04:49

Цитата:

Сообщение от alexmixaylov
$('#infoaddress').removeAttr("disabled");

Странно, что не работает.

Может так?
('#infoaddress')[0].disabled = false;

danik.js 19.09.2013 05:28

Потому что атрибут и свойство - две большие разницы.
Либо как Ruslan_xDD предложил, либо jquery-way:
$('#infoaddress').prop('disabled', false);

ksa 19.09.2013 09:21

Цитата:

Сообщение от alexmixaylov
// эта конструкция не работает $('#infoaddress').removeAttr("disabled");

Бивас, тест! (с)

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(function (){
	$('#off').click(function (){
		$('input').attr('disabled',true);
	});
	$('#on').click(function (){
		$('input').removeAttr('disabled');
	});
});
</script>
</head>
<body>
<div>
	<input type='text' />
	<input type='button' value='test' />
</div>
<button id='off'>off</button>
<button id='on'>on</button>
</body>
</html>

Таки работает! :D

danik.js 19.09.2013 10:18

ksa, судя по "live" код старый, и версия jQuery тоже. А между тем, "баг" пофиксили в версии 1.7.2 : http://bugs.jquery.com/ticket/10870

Причем по сути это не баг, а "неожиданность" для тех, кто плохо знает DOM (хотя нужно учесть что .prop() в jQuery появился не сразу)

alexmixaylov 20.09.2013 11:48

live заменил на on

$('#from').on('change', function () {
    if ($('#from').val() == 'address') {
        $('#infoaddress').show();
      $('#infoaddress input').prop('disabled', false);

    } 
    else {
       $('#infoaddress').hide();
       $('#infoaddress input').prop('disabled', true);

     }

такая конструкция хорошо работает
если использовать removeAttr, то работает только один раз

Спасибо большое за помощь

Еще ввело в заблуждение - в файрбаге не показывает, что навешивается атрибут

ruslan_mart 20.09.2013 13:22

Цитата:

Сообщение от alexmixaylov
Еще ввело в заблуждение - в файрбаге не показывает, что навешивается атрибут

Потому что он здесь нигде не навешивается. Тут Вы меняете свойство, а не значение атрибута.

danik.js 20.09.2013 17:18

alexmixaylov, разве не видишь что код дублируется. Это не есть хорошо.

$('#from').on('change', function () {
    var isAddress = this.value == 'address';
    $('#infoaddress').toggle(isAddress);
    $('#infoaddress input').prop('disabled', !isAddress);
});

ruslan_mart 20.09.2013 17:25

Можно даже так упростить:

$('#from').on('change', function () {
    var isAddress = this.value == 'address';
    $('#infoaddress').toggle(isAddress).find('input').prop('disabled', !isAddress);
});


Часовой пояс GMT +3, время: 08:07.