2009-08-24 54 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