#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, потому что у нее не было бы проблемы …. но молодец, парень!! отличная работа!!!!!