Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.09.2013, 22:29
Аспирант
Отправить личное сообщение для alexmixaylov Посмотреть профиль Найти все сообщения от alexmixaylov
 
Регистрация: 14.09.2013
Сообщений: 70

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

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

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

$('#from').live('change', function () {
    if ($('#from').val() == 'address') {
        $('#infoaddress').show();
       // эта конструкция не работает $('#infoaddress').removeAttr("disabled");
        
    } else {
        $('#infoaddress').hide();
        $('#infoaddress input').attr("disabled","disabled");
 
    }
Ответить с цитированием
  #2 (permalink)  
Старый 19.09.2013, 04:49
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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

Может так?
('#infoaddress')[0].disabled = false;
Ответить с цитированием
  #3 (permalink)  
Старый 19.09.2013, 05:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Потому что атрибут и свойство - две большие разницы.
Либо как Ruslan_xDD предложил, либо jquery-way:
$('#infoaddress').prop('disabled', false);
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 19.09.2013, 09:21
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,209

Сообщение от 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>

Таки работает!
Ответить с цитированием
  #5 (permalink)  
Старый 19.09.2013, 10:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

Причем по сути это не баг, а "неожиданность" для тех, кто плохо знает DOM (хотя нужно учесть что .prop() в jQuery появился не сразу)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 20.09.2013, 11:48
Аспирант
Отправить личное сообщение для alexmixaylov Посмотреть профиль Найти все сообщения от alexmixaylov
 
Регистрация: 14.09.2013
Сообщений: 70

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, то работает только один раз

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

Еще ввело в заблуждение - в файрбаге не показывает, что навешивается атрибут
Ответить с цитированием
  #7 (permalink)  
Старый 20.09.2013, 13:22
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Сообщение от alexmixaylov
Еще ввело в заблуждение - в файрбаге не показывает, что навешивается атрибут
Потому что он здесь нигде не навешивается. Тут Вы меняете свойство, а не значение атрибута.
Ответить с цитированием
  #8 (permalink)  
Старый 20.09.2013, 17:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

$('#from').on('change', function () {
    var isAddress = this.value == 'address';
    $('#infoaddress').toggle(isAddress);
    $('#infoaddress input').prop('disabled', !isAddress);
});
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 20.09.2013, 17:25
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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

$('#from').on('change', function () {
    var isAddress = this.value == 'address';
    $('#infoaddress').toggle(isAddress).find('input').prop('disabled', !isAddress);
});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сменить атрибут у тега img lifecom jQuery 2 03.09.2013 16:52
Аналог disabled allasan Events/DOM/Window 5 26.01.2013 19:38
атрибут disabled pingvinchic Events/DOM/Window 5 04.03.2010 16:36
Атрибут "jQuery<циферки>" и IE psu jQuery 6 18.05.2009 11:55
disabled без disabled alexKniaz Общие вопросы Javascript 5 01.11.2008 00:37