Две петли перепутались

#php #javascript #html #forms #loops

#php #javascript #HTML #формы #циклы

Вопрос:

У меня есть этот код, я удалил некоторый код, который не имеет никакого отношения к моей проблеме.

 while ($row_pl = mysql_fetch_array($res_pl))
{
    // Uurtarief
    $sql_uur = "SELECT
                aantal_kop,
                tarief_min,
                tarief_max,
                tijd_min,
                tijd_max,
                tijd_extra
                FROM uurtarief
                WHERE machine = '".$row_pl['machine']."'
                ORDER BY aantal_kop ASC";

    if(!$res_uur = mysql_query($sql_uur))
    {
        include('includes/errors/database_error.php');
    }
    else
    {
        while ($row_uur = mysql_fetch_array($res_uur))
        {
            ?>
                <input type="text" name="tar_kop[]" size="8" value="<?php echo $row_uur['aantal_kop']; ?>" />
                <input type="text" name="tar_tarief[]" size="8" value="<?php echo $uurtarief; ?>" />
                <input type="text" name="tar_tijd_extra[]" size="8" value="<?php echo $row_uur['tijd_extra']; ?>" />
                <br />
            <?php
        }
    }

    ?>
<tr>
    <td>
        <input type="text" name="pl_aantal_kop[]" size="3" onChange="uur_tarief(this, <?php echo $i ?>)" value="" />
    </td>
    <td>
        <input type="text" name="pl_tarief_ph[]" size="4" value="" />
    </td>
    </tr>
<?php
}
 

С помощью javascript я пытаюсь найти значение в pl_aantal_kop[] и отправить соответствующий параметр в pl_tarief_ph[]

 function uur_tarief(selectVeld, nr)
{
    if(document.getElementsByName('pl_aantal_kop[]')[nr].value == 1)
    {
        document.getElementsByName('pl_tarief_ph[]')[nr].value = document.getElementsByName('tar_tarief[]')[0].value;
        document.getElementsByName('pl_snijtijd_extra[]')[nr].value = document.getElementsByName('tar_tijd_extra[]')[0].value;
    }

    if(document.getElementsByName('pl_aantal_kop[]')[nr].value == 2)
    {
        document.getElementsByName('pl_tarief_ph[]')[nr].value = document.getElementsByName('tar_tarief[]')[1].value;
        document.getElementsByName('pl_snijtijd_extra[]')[nr].value = document.getElementsByName('tar_tijd_extra[]')[1].value;
    }

    if(document.getElementsByName('pl_aantal_kop[]')[nr].value == 3)
    {
        document.getElementsByName('pl_tarief_ph[]')[nr].value = document.getElementsByName('tar_tarief[]')[2].value;
        document.getElementsByName('pl_snijtijd_extra[]')[nr].value = document.getElementsByName('tar_tijd_extra[]')[2].value;
    }

    if(document.getElementsByName('pl_aantal_kop[]')[nr].value == 4)
    {
        document.getElementsByName('pl_tarief_ph[]')[nr].value = document.getElementsByName('tar_tarief[]')[3].value;
        document.getElementsByName('pl_snijtijd_extra[]')[nr].value = document.getElementsByName('tar_tijd_extra[]')[3].value;
    }

    if(document.getElementsByName('pl_aantal_kop[]')[nr].value == 5)
    {
        document.getElementsByName('pl_tarief_ph[]')[nr].value = document.getElementsByName('tar_tarief[]')[4].value;
        document.getElementsByName('pl_snijtijd_extra[]')[nr].value = document.getElementsByName('tar_tijd_extra[]')[4].value;
    }

    if(document.getElementsByName('pl_aantal_kop[]')[nr].value == 6)
    {
        document.getElementsByName('pl_tarief_ph[]')[nr].value = document.getElementsByName('tar_tarief[]')[5].value;
        document.getElementsByName('pl_snijtijd_extra[]')[nr].value = document.getElementsByName('tar_tijd_extra[]')[5].value;
    }
}
 

Проблема, которая возникла, заключается в том, что javascript продолжает начинать подсчет с первой строки while ($row_uur = mysql_fetch_array($res_uur)) цикла вместо поля, принадлежащего первому циклу. Ниже скриншот этого цикла.

Есть предложения?

введите описание изображения здесь

Ответ №1:

Вы можете сжать свой JS до этого:

 function uur_tarief(selectVeld, nr)
{
    var index = document.getElementsByName('pl_aantal_kop[]')[nr].value;

    document.getElementsByName('pl_tarief_ph[]')[nr].value = document.getElementsByName('tar_tarief[]')[index - 1].value;
    document.getElementsByName('pl_snijtijd_extra[]')[nr].value = document.getElementsByName('tar_tijd_extra[]')[index - 1].value;
}
 

Можете ли вы попробовать этот код и опубликовать его обратно? Где вы инициализируете и вызываете код JavaScript? Опубликованный вами код выглядит нормально (хотя и сильно раздут), так что это может быть проблемой в другом месте.

Комментарии:

1. Как насчет утверждений value == 1, value == 2 и т.д.? Они являются частью кода. Это числа, которые можно выбрать из столбца, как показано на изображении.

2. Ваше значение всегда на единицу больше, чем номер индекса, следовательно [index - 1] .