Как изменить имя нескольких выбранных значений HTML? - PullRequest
0 голосов
/ 28 мая 2009

У меня около 20 флажков. Когда пользователь выбирает их и затем использует кнопку отправки alternate , мне нужно изменить имя пары имя / значение для выбранных входов.

Почему эта функция изменяет только имя каждого другого выбранного входа?

function sub_d()
{

    for (i = 0; i < document.checks.OGname.length; i++) //for all check boxes
    {
        if (document.checks.OGname[i].checked == true)
        {
            document.checks.OGname[i].name="newname"; //change name of input 

        }

    }

    document.checks.submit();
}

Выход:

newname
    '105' 
OGname
    '106' 
newname
    '107' 
OGname
    '108' 
newname
    '109' 
OGname
    '110' 

Ответы [ 3 ]

1 голос
/ 28 мая 2009

Было бы здорово, если бы вы предоставили более подробное описание вашего сценария, но я бы хотел, чтобы мой ответ был полезным.

function sub_d()
{    
    for (i = 0; i < document.checks.OGname.length; i++) //for all check boxes
    {
        if (document.checks.OGname[i].type == 'CHECKBOX')
            if (document.checks.OGname[i].checked)
               {
                   document.checks.OGname[i].name="newname"; //change name of input 

               }    
    }    
    document.checks.submit();
}

Я обычно управляю коллекциями DOM таким образом: (Я не знаю, лучший ли это способ)

   function sub_d()
    {    
        var theInputs = document.checks.getElementsByTagName('input');
        for (var i = 0; i < theInputs.length; i++) 
        {
            if (theInputs[i].type == 'CHECKBOX')
                if (theInputs[i].checked)
                   {
                       theInputs[i].name="newname";         
                   }    
        }    
        document.checks.submit();
    }
1 голос
/ 28 мая 2009

Переименовав первый элемент списка, вы уменьшили длину списка на один и удалили первый элемент. В следующий раз в цикле предыдущий второй элемент теперь является первым, а второй - старым третьим.

Я не эксперт по JavaScript, но что-то в этом роде может сработать.

function sub_d()
{
  i=0;
  while (document.checks.OGname.length > i)
  {
    if (document.checks.OGname[i].checked="true")
      {
        document.checks.OGname[i].name="newname";
      }else{
        i++;
      }
  }
  document.checks.submit();
}

Как я уже сказал, никаких гарантий.

0 голосов
/ 28 мая 2009

С вашей помощью, ребята, я придумал это, похоже, работает хорошо. Дайте мне знать, если это может быть улучшено для использования другими ...

function sub_d()
{

    for (i = 0; i < document.checks.OGname.length; i++) //for all check boxes
    {
        if (document.checks.OGname[i].checked == true)
        {
            document.checks.OGname[i].name="newname"; //change name of input data so we know it is for other function
            //By renaming the first element of the list, we have reduced the length of the list by one 
            //and deleted the first element. This is why we need to keep i at it's current position after a name change.
            i=i-1;  
        }
    }

    //When there is only one check box left it's propert length becomes undefined.
    //We will need this statement for the last undefined check box not covered in the for loop
    //We can no longer index user[0]
    document.checks.OGname.name="newname"; 

    document.checks.submit();//submit these checked values to the .exe

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...