2010-08-05 4 views
2

Возможно ли изменить значение имени входного элемента?Изменение значения входного имени

Вот мой код, но я могу установить что угодно, кроме имени.

$('#country').change(function(){ 
    var $country = $(this); 
    var $state = $('#state'); 
    var $county = $("#county"); 
    if($country.val() != 226){ 
     $state.attr('name', ''); 
     $state.closest('p').hide(); 
     $county.attr('name', 'user[state]'); 
     $county.closest('p').show(); 
    }else{   
     $state.attr('name', 'user[state]'); 
     $state.closest('p').show(); 
     $county.attr('name', ''); 
     $county.closest('p').hide();    

    } 
}); 

Любые идеи, почему установка имени attr не работает?

Надеется, что вы можете посоветовать

+0

Вы пытаетесь установить его имя ни к чему? Какая у вас цель? –

+0

вместо вашего подхода вы также можете просто указать название состояния как N/A за пределами страны 226, что является обычной практикой в ​​веб-формах. –

ответ

2

Я беру выстрел в темноте здесь, кажется, что вы хотите, чтобы предотвратить эти элементы от представления к серверу, если это так, вместо того, чтобы пытаться изменить атрибут name, вы можете установить disabled attribute, как это:

$('#country').change(function() { 
    var $country = $(this), $state = $('#state'), $county = $("#county"); 
    if($country.val() != 226) { 
     $state.attr('disabled', true).closest('p').hide(); 
     $county.attr('disabled', false).closest('p').show(); 
    } else { 
     $state.attr('disabled', false).closest('p').show(); 
     $county.attr('disabled', true).closest('p').hide(); 
    } 
}); 

Если элемент формы имеет атрибут disabled, он не может быть successful, что означает, что он не будет включен при отправке его на сервер. Поэтому в приведенном выше примере просто дайте оба входа name="user[state]" с самого начала, и это исключает тот, который вы не хотите от POST (или GET), который делает ваш <form>.

Это не отвечает на вопрос напрямую, я понимаю это, но это другой (я думаю) более простой способ избежать проблемы :). Вы можете сократить это дальше, используя .toggle(bool), но я думаю, что это разрушает пример, поэтому Я оставил его без сжатия выше, короткая версия будет выглядеть так:

$('#country').change(function() { 
    var is226 = $(this).val() == 226; 
    $('#state').attr('disabled', !is226).closest('p').toggle(is226); 
    $("#county").attr('disabled', is226).closest('p').toggle(!is226); 
}); 
+0

Хороший ответный ник. Не думал об использовании отключенных !!!!. Хороший короткий код. Странно, хотя я могу показать, что вход отключен, даже пытаясь в окне консоли. – Lee

+0

@ Lee - Вы говорите, что ни код выше, ни ваша консоль не видят элемент как 'disabled'? Если да, то какой браузер? –

+0

Просто пытайтесь установить его в консоли, то есть $ ('# county'). Attr ('disabled', false); $ ('# county'). Attr ('disabled', true); Истина не работает – Lee

-1

Если я правильно помню, это ошибка IE. Мне пришлось преобразовать объект JQuery obj в строку, изменить имя как строку, а затем создать новый объект jquery вокруг строки html.

так

var form = $('#myForm').html(); 
form.replace('name', 'newName'); 
$('#myFormWrapper').html(form); 

Видимо меняется имя атрибута является более сложным, чем он должен быть:/

+0

Возможно, потому, что IE имеет тенденцию принимать любые атрибуты «имя» и автоматически создавать объекты с тем же именем, что указывает на этот элемент DOM. –