更改输入名称值

时间:2010-08-05 22:47:13

标签: jquery input

是否可以更改输入元素的名称值?

这是我的代码,但我可以设置除名称之外的任何内容。

$('#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的任何想法都不起作用?

希望你能提出建议

2 个答案:

答案 0 :(得分: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]",这将排除您<form>所做的POST(或GET)中不需要的输入。

它没有直接回答这个问题,我意识到这一点,但它是另一种(我认为)更简单的方法来避免这个问题:)你可以使用.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);
});

答案 1 :(得分:-1)

如果我没记错的话,这是一个IE错误。我不得不将JQuery obj转换为字符串,将名称更改为字符串,然后围绕html字符串创建新的jquery对象。

所以

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

显然更改名称属性比应该更难:/