2010-08-05 172 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

你試圖設置它的名字爲什麼?你的目標是什麼? – 2010-08-05 22:52:29

+0

而不是你的方法,你也可以將國家的名稱設置爲國家226以外的N/A,這是網絡表單上的一種常規做法。 – 2010-08-05 22:56:02

回答

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 2010-08-05 23:51:31

+0

@Lee - 你是說上面的代碼或你的控制檯都沒有看到元素爲'disabled'?如果是這樣,哪個瀏覽器? – 2010-08-05 23:54:40

+0

試圖在控制檯中設置它,即 $('#county')。attr('disabled',false); $('#county')。attr('disabled',true); 真的不起作用 – Lee 2010-08-05 23:58:50

-1

如果我沒記錯,這是一個IE漏洞。我必須將JQuery obj轉換爲字符串,將名稱更改爲字符串,然後在html字符串周圍創建一個新的jquery對象。

所以

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

顯然改變name屬性是比較困難比它應該是:/

+0

可能是因爲IE往往會採用任何'name'屬性並自動創建指向該DOM元素的同名對象。 – 2010-08-05 23:41:21