是否可以更改输入元素的名称值?
这是我的代码,但我可以设置除名称之外的任何内容。
$('#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 :(得分: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);
显然更改名称属性比应该更难:/