Можно ли изменить имя входного тега с помощью JavaScript? - PullRequest
3 голосов
/ 25 августа 2009

Я хочу знать, возможно ли изменить имя входного тега с помощью javascript или jquery, например, в этом коде:

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

Я хочу изменить значение some_name, когда пользователь выбирает этот переключатель.

причина, по которой я хочу это сделать, описана здесь: Как можно вычислить сумму значений переключателей с помощью jQuery?

Ответы [ 6 ]

8 голосов
/ 25 августа 2009

Просто 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 гораздо проще.

4 голосов
/ 25 августа 2009

Способ jQuery

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

Гамбо имеет ванильный JavaScript-способ

2 голосов
/ 25 августа 2009

Да, вы можете изменить имя любого элемента с помощью 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');
});
1 голос
/ 25 августа 2009

Конечно. Если jQuery - ваш яд, это должно сработать:

$("input[name=some_name]").attr("name", "other_name");
0 голосов
/ 07 октября 2009

Попытка изменить атрибут имени переключателя вызовет странное, нежелательное поведение в IE.

Лучший способ справиться с этим - заменить старый переключатель на новый. Этот пост может вам помочь. Если вы используете jQuery, вы можете сделать это с помощью функции replaceWith.

Дополнительная информация об изменении атрибутов имени в IE .

0 голосов
/ 25 августа 2009

Я придумал это:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...