добавить новую строку в таблицу с выпадающим списком 2 — как мне изменить имя выбора

#javascript #xhtml #asp-classic

#javascript #xhtml #asp-classic

Вопрос:

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

Я пишу список покупок для своего школьного проекта. У меня есть таблица (shopinglist), которая содержит форму.

В форме у меня есть 2 выпадающих списка, один (продукт) получает значения из моей базы данных, а второй (количество) — постоянные числа. Рядом с этими двумя у меня есть 2 кнопки добавить и удалить.

При нажатии добавить я хочу добавить новую строку с тем же материалом.

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

И последнее — строка будет добавлена, только если пользователь выберет из обоих вариантов, а не только из одного.

вот мой код: функции добавления и удаления javascript:

  function addRow(tableID) {

if (document.getElementById("product").value!="dafult" amp;amp; document.getElementById("quantity").value!="zero") 
{
            var table = document.getElementById(tableID);

        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount);

        var colCount = table.rows[0].cells.length;

            var colCount = table.rows[0].cells.length;

            for(var i=0; i<=colCount; i  ) {
             var newcell = row.insertCell(i);
                 newcell.innerHTML = table.rows[1].cells[i].innerHTML;
              switch(newcell.childNodes[1].type) {
                case "text":
                        newcell.childNodes[1].value = "";
                        break;
                case "checkbox":
                        newcell.childNodes[1].checked = false;
                        break;
                case "select-one":
                        newcell.childNodes[1].selectedIndex = 0;
                        break;

                }
            }
              newcell.childNodes[1].visible = true;
              table.rows[rowCount-1].cells[2].style.visibility="hidden" ;
            }
            else
          {
            if (document.getElementById("product").value!="dafult" amp;amp; document.getElementById("quantity").value=="zero") 

                 alert("please choose quantity") ;
               if (document.getElementById("product").value=="dafult" amp;amp; document.getElementById("quantity").value!="zero") 
                alert("please choose product") ; 
               if (document.getElementById("product").value=="dafult" amp;amp; document.getElementById("quantity").value=="zero") 
                    alert("please choose product and qantity") ;
           }
            }

        function deleteRow(i){
        if (document.getElementById("product").value!="dafult" amp;amp; document.getElementById("quantity").value!="zero") 
            document.getElementById('shopinglist').deleteRow(i)
        else
            alert("you can't delete row before adding it");
}
  

и HTML и ASP

 <table border="0" id="shopinglist">
<caption valign="top" style="width:90%;height:35px; color:green ;"/> your order 
<tr><td></td><td> product</td> <td> quantity</td></tr>
<tr>
<form name="juices">
    <%      
    set rs=Server.CreateObject("ADODB.recordset")
    rs.open "SELECT ID, [Product-Name] ,[size-liter],[Customer price] FROM Product GROUP BY  ID,[Product-Name] ,[Product].[size-liter],[Product].[Customer price] ", conn
    %>
<td>
<select name="product" id="product" width="10" >
<option value="dafult" selected>בחר מוצר מהרשימה</option>
<%
do while not rs.EOF %>
<option value=<%=rs("Product-Name")%> > juice<%=rs("Product-Name")%>   <%=rs("size-liter")%>  liter<%=rs("Customer price")%>  $</option>
<%
rs.MoveNext()
loop
rs.close %> 
</select>
</td>
<td>
<select name="quantity" id="quantity">
<option value="zero" selected="selected">0</option>
<option value="one">1</option>
<option value="two">2</option>
<option value="three">3</option>
<option value="four">4</option>
<option value="five">5</option>
<option value="six">6</option>
<option value="seven">7</option>
<option value="eight">8</option>
<option value="nine">9</option>
<option value="ten">10</option>
</select>
</td>
<td>
<input type="button" value="add" onclick="addRow('shopinglist')" id="addbutton"/>
</td>
<td>
    <input type="button" value="delete"onclick="deleteRow(this.parentNode.parentNode.rowIndex)" id="remove"/>
</td>
</tr>
         </form>
  

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

1. Ваше предложение незакончено: «Проблема в том, что я не могу (или, возможно, не знаю, как) изменить имя выбора в соответствии с номером строки. Я имею в виду, как ??»

2. например -при первом нажатии кнопки добавить я хочу, чтобы она создавала выпадающий список 2, когда первый выбор будет выглядеть как <выберите имя=product_2, а затем вторым будет select name=quantity_2, при следующем добавлении строки предварительно выберите name =product_3 и так далее..

Ответ №1:

IE не позволит вам изменить имя элемента после того, как вы добавите его на страницу. То, как это написано, вам пришлось бы фактически изменить строку, содержащую выбор, перед установкой innerHTML

 newcell.innerHTML = table.rows[1].cells[i].innerHTML.replace(/(<select. ?name=". ?)"/, $1   rowCount   i   """);
  

НЕ ТЕСТИРОВАЛОСЬ … что-то в этом роде…

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

1. нет, это не работает.. нет, я вообще не могу добавить строку … это jquery?

2. вы полностью пропустили «НЕ ТЕСТИРОВАЛОСЬ … что-то в этом роде …»?

3. 🙂 я невежественен … я действительно начинаю верить, что я никак не мог этого сделать .. нигде в Интернете нет ответа на эту проблему..

4. да, есть… измените имя перед установкой innerHTML .. вот так просто.

5. попробуйте создать содержимое строки с нуля с помощью javascript вместо использования table.rows[1].cells[i].innerHTML

Ответ №2:

Вот пример https://gist.github.com/957827 с этого вы могли бы начать. Это радикально отличается, но проще, чем у вас.

У меня нет IE6, 7, 8, чтобы протестировать его должным образом, но это должно быть что-то вроде примера.

Еще один комментарий, идентификаторы должны быть уникальными. И вы не должны использовать их в строке таблицы, которую вы будете копировать.

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

1. хотя это намного красивее… вы не можете изменить атрибут «name» элемента в IE

2. Верно, для этой проблемы есть решения. Но это должно было начаться с чего-то более чистого и простого. Может быть, ему все равно повезет, и он сможет сделать свою домашнюю работу в Firefox или Chrome

3. в его первоначальном вопросе все сказано … это даже не касается этого?

4. Да, я здесь. rofl @ ie9.. 2 плохо, что есть по крайней мере 1 другой браузер, о котором нужно беспокоиться 😉 … и она, вероятно, не спросила бы? если бы целью был ie9, потому что у нее не было бы проблемы …. но молодец, парень!! отличная работа!!!!!