почему я не получаю значение проверки в флажке? - PullRequest
0 голосов
/ 21 мая 2010

У меня есть флажок. Когда вы устанавливаете флажок, соответствующий идентификатор помещается в текстовое поле. Однако, когда в базе данных есть только одно значение, я не могу получить контрольное значение. Ты можешь сказать мне, почему? Вот мой код:

<? if(isset($AcceptFriend)) {?>
<form action="<?=site_url()?>friends/Accept_Friend" name="orderform" id="orderform" method="post" style="background:#CCCC99">
<input type="text" name="chId" id="chId" >
<table  border="0" height="50%" id="chkbox" width="50%" >
<tr>
<? foreach($AcceptFriend as $row)
{?>
<tr>
<td>Name</td><td><?=$row['dFrindName'].'</br>';?></td>
<td> <input type="checkbox" name="checkId" id="checkId" value="<? echo  $row['dMemberId']; ?>" onClick="get_check_value()" ></td>
</tr>

<? }}?>
</tr>
 <tr> <td width="10px"><input type="submit" name="submit" id="submit" class="buttn" value="AcceptFriend"></td></tr>

</table>


</form>

Это скрипт, который я использую

function get_check_value()
{
    var c_value = "";

    for (var i=0; i < document.orderform.checkId.length; i++)
       {
       if (document.orderform.checkId[i].checked)
          {
          c_value = c_value + document.orderform.checkId[i].value + "\n";
          }
       }
       alert(c_value);
       document.getElementById('chId').value= c_value;
}

Ответы [ 3 ]

3 голосов
/ 22 мая 2010

Если вы используете идентификатор один раз, возвращаемое значение document.orderform.checkId.length даст вам количество свойств этого объекта, потому что document.orderform.checkId будет этим единственным объектом.

В вашем цикле вы пройдете через все эти свойства и спросите их об их свойстве «проверено». Поскольку они не обладают этим свойством, вы получите ошибки, и ваш скрипт потерпит неудачу.

Если идентификатор используется более одного раза, document.orderform.checkId станет массивом всех объектов с таким идентификатором, а длина вернет вам их количество.

В этом случае ваш цикл пройдет через все флажки, как вы и планировали.

Лучшим решением было бы использовать document.getElementsByName ('checkId') или добавить скрытый фиктивный флажок, который будет игнорироваться при запуске цикла с i = 1 вместо i = 0;

Поскольку идентификаторы должны быть уникальными, я бы порекомендовал изменить ваши скрипты на использование атрибута name и использовать document.getElementsByName ('checkId'), который всегда будет возвращать массив.

0 голосов
/ 21 мая 2010

Андр прав, и вам лучше не осуждать человека за здоровую критику - его ответ может не решить вашу проблему, но идентификаторы HTML должны иметь уникальное значение, идентификаторы классов могут иметь одинаковые имена.

0 голосов
/ 21 мая 2010

Вы должны дать вашему флажку атрибут имени в виде массива: "checkId []" И атрибут ID должен быть разным для каждого флажка, checkId14 или любого другого, который вы можете отслеживать позже.

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