Как получить значение в соответствии с именем идентификатора последовательности события onchange? - PullRequest
2 голосов
/ 29 января 2012

В одной таблице есть поля с кнопкой добавления строки. Я использую событие onchange для вызова данных из других таблиц , поэтому, когда я выбираю опцию в окне опций, можно автоматически получить значение, выбранное ранее (do not need input the value manually). Затем я добавляю строку в ту же таблицу, и после этого выбираю один вариант обратно в поле и получаю разные значения от первого, the problem is the values ​​obtained appear in the first box, not in the second box.

Для примера html:

<table id="table">
    <tr>
        <td>No</td>
        <td>Name</td>
        <td>Class</td>
        <td>Point</td>
        <td>Action</td>
    </tr>
    <tr>
            <td>1</td>
        <td><select name="name">
            <option value="#">&nbsp;</option>
            <?php
                    opendb();
                $query = "SELECT * FROM student";
                $result = mysql_query($query);
                while($data = mysql_fetch_array($result)){
                    $ID = $data['ID'];
                    $Name = $data['Name'];
                    echo "<option value='$ID'>$Name</option>";
                }
            ?>
             </select>
        </td>
        <td><select name='class' onchange="choosepoint(this);">
            <option value="#">&nbsp;</option>
            <?php
                    opendb();
                $query = "SELECT * FROM student2";
                $result = mysql_query($query);
                while($data = mysql_fetch_array($result)){
                        $ID1 = $data['ID'];
                    $class = $data['Class'];
                    echo "<option value='$ID'>$class</option>";
                }
            ?>
            </select>
        </td>
        <td>
                <div id="point" name="point"></div>
            </td>
            <td><input type="button" value=" + " onClick="addRowToTable();"> | <input type="button" value=" - " onClick="removeRowFromTable();"></td>
    </tr>
</table>

То, что я искал, проблема, которую я нашел здесь:

function choosepoint(combobox)
{
    var kode = combobox.value;
    if (!kode) return;
    xmlhttp.open('get', '../template/get_point.php?kode='+kode, true);
    xmlhttp.onreadystatechange = function() {
        if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200))
        {
             document.getElementById("point").innerHTML = xmlhttp.responseText;
        }
        return false;
    }
    xmlhttp.send(null);
}

Если имя идентификатора «точка» изменилось на «точка2», то значение появится во втором блоке, но значение в первом блоке отсутствует.

Поэтому я попытался выполнить цикл, чтобы получить значение имени идентификатора: точка, точка2, точка3 и т. Д. (В зависимости от того, сколько нужно добавить строк).

function choosepoint(combobox)
{
    var kode = combobox.value;
    if (!kode) return;
    xmlhttp.open('get', '../template/get_point.php?kode='+kode, true);
    xmlhttp.onreadystatechange = function() {
        if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200))
        {
             Var tbl = document.getElementById("table");
             var r = tbl.length;
             var i = r;
             document.getElementById("point"+ i).innerHTML = xmlhttp.responseText;
        }
        return false;
    }
    xmlhttp.send(null);
}

Я получил нулевые или нулевые значения, не может быть запущен или не получить значение, равное точке, точке2, точке3 и т. Д. Есть какой-то неправильный сценарий, который я сделал? Нужна большая помощь м (_ _) м.

Спасибо.

Обновление: это для решенных.

function choosepoint(combobox)
{
    var kode = combobox.value;
    if (!kode) return;
    xmlhttp.open('get', '../template/get_point.php?kode='+kode, true);
    xmlhttp.onreadystatechange = function() {
        if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200))
        {
            var tbl = document.getElementById("table");
        var r = tbl.rows.length;
            var add = document.getElementById("point"+r);

        add.innerHTML = xmlhttp.responseText;
        }
        return false;
    }
    xmlhttp.send(null);
}

1 Ответ

1 голос
/ 29 января 2012

В вашем коде вы дали идентификатор для таблицы как "table" , а затем вы получили доступ к "document.getElementById ('table')" и затем использовали "tbl.length" , что привело к нулю или отсутствию значения. Проблема в том, что когда вы используете getElementById , у вас нет свойства "length" . Для доступа к количеству таблиц используйте следующую команду:

<table name="table">
and then
tbl = document.getElementById('table')
r = tbl.rows.length; //This will give you the row length.
function choosepoint(combobox)
{
    var kode = combobox.value;
    if (!kode) return;
    xmlhttp.open('get', '../template/get_point.php?kode='+kode, true);
    xmlhttp.onreadystatechange = function() {
        if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200))
        {
             Var tbl = document.getElementById('table')
             var r = tbl.rows.length;
              alert(document.getElementById("point"+r));//This should be object. If undefined then you don't have any element.
              **//Edit Part**
              if(document.getElementById("point"+r))
                 document.getElementById("point"+r).innerHTML = xmlhttp.responseText;
              else
              {
                  var cellRight = row.insertCell(3);//The cell or column number can be any here am using it as third column.
                  var div = document.createElement('div');
                  div.id = 'point' + r;
                  cellRight.appendChild(div);
                  cellRight.innerHTML = xmlhttp.responseText;
              }
             **//Till Here**
        }
        return false;
    }
    xmlhttp.send(null);
}

Надеюсь, это поможет.

...