2009-08-24 55 views
1

我想知道,如果它能夠在此代碼JavaScript或jQuery的改變輸入變量的名稱,例如:可以使用javascript更改輸入標籤的名稱?

<input type="radio" name="some_name" value=""> 

我想改變some_name值,當用戶選擇該單選按鈕。

什麼,我想這樣做的原因說明如下:How might I calculate the sum of radio button values using jQuery?

+4

只是單挑:如果你改變一個單選按鈕的名字,你應該改變它們的名字,否則你最終可能會提交兩個名字(並且它可能會與瀏覽器UI以及)。到目前爲止給出的所有jQuery示例都會爲您執行此操作。 – Shog9 2009-08-24 20:37:03

回答

6

只需elem.name = "some other name"elem.setAttribute("name", "some other name")其中elem是你要改變的元素。

要做到這一點的選擇,使用的onchange事件:

<input type="radio" name="some_name" value="" onchange="if(this.selected) this.name='some other name'"> 

而且該行爲適用於每一個單選按鈕使用該名稱:

var inputElems = document.getElementsByTagName("input"); 
for (var i=inputElems.length-1; i>=0; --i) { 
    var elem = inputElems[i]; 
    if ((elem.type || "").toLowerCase() == "radio" && elem.name == "some_name") { 
     elem.onchange = function() { 
      if (this.selected) { 
       this.name = "some other name"; 
      } 
     }; 
    } 
} 

但使用jQuery爲很容易。

+0

只是使用你的代碼.. for循環應該是 'for(var i = inputElems.length-1; i> = 0; --i){' – 2010-06-25 07:43:36

+0

@Jason Jong:哦,是的,你是絕對正確的。謝謝! – Gumbo 2010-06-25 08:00:06

4

jQuery的方式

$('input:radio[name="some_name"]').attr('name', 'new name'); 

Gumbo具有JavaScript的方式覆蓋

2

是的,你可以改變的JavaScript的任何元素的名稱的香草。請記住,雖然IE 6和7在提交的表單中輸入元素已經在javascript中進行了修飾(不確定這個確切的情況是否會受到影響),但它們還是有問題。

$('input:radio[name="some_name"]').attr('name', 'new_name'); 

編輯:要改變它,只有當它被選中,這裏是該代碼:

$("input:radio[name='some_name']").click(function() { 
    if ($(this).attr('checked')) $("input:radio[name='some_name']").attr('name', 'new_name'); 
    else       $("input:radio[name='some_name']").attr('name', 'some_name'); 
}); 
+0

關於你的編輯:改變一個單選按鈕的名字可能是一個壞主意,除非沒有其他單選按鈕共享該名稱(在這種情況下,他應該真的使用複選框)。 – Shog9 2009-08-24 20:37:57

+0

@ shog9:感謝您指出這一點,當我發佈它時沒有考慮到它。我更新了它,所以它會改變名稱爲「some_name」的所有輸入,而不僅僅是被點擊的輸入。 – tj111 2009-08-24 20:41:52

+1

@ tj111:優秀!但是你可能要仔細檢查最後一個選擇器...... – Shog9 2009-08-24 20:42:38

1

肯定。如果jQuery是你的毒藥,這應該做的伎倆:

$("input[name=some_name]").attr("name", "other_name"); 
+0

對於Russ或tj111的答案並沒有真正添加任何內容。 – Shog9 2009-08-24 20:39:29

+1

對不起。我在別人面前回答,不知道他們會回答什麼。期待更多您的建設性批評! – 2009-08-25 03:47:56

0

我想出了這一點:

<input type="radio" name="some_name" value="" id="radios"> 

<script type="text/javascript" charset="utf-8"> 
$(document).ready(function() 
{ 
    $("#radios").click(function() 
    { 
     $(this).attr("name", "other_name"); 
    }); 
}); 
</script> 
+0

這將改變組中單個單選按鈕的名稱;這可能是他想要的,但我無法想象爲什麼。看到我上面的評論... – Shog9 2009-08-24 20:40:46

0

試圖改變一個單選按鈕的名稱屬性將導致IE奇怪,不良行爲。

處理此問題的最佳方法是用新的單選按鈕替換舊的單選按鈕。 This post可能會幫助你。如果你使用jQuery,你可以用replaceWith函數來完成。

More information about changing name attributes in IE