我正在寻求建议,可能是示例代码,这些链接可以帮助我改进报价单。目前的情况是这样的: -
为项目(来自mysql数据库)生成动态(选择组合)行以及价格和数量的空输入框。用户根据否添加或删除行。如果需要物品并填写价格,数量等,然后将其带到包含所有计算值等的第二个表格,以便他可以打印相同或通过电子邮件发送。
现在项目数约为3500,因此当用户达到第5行或第6行时,添加新行的速度变得非常慢。我需要从数据库中提取mysql项目,因为它们时不时地不断增加。
非常感谢任何帮助。提前谢谢。
以下是我目前使用的动态行的javascript代码: -
<SCRIPT language="javascript">
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[0].cells[i].innerHTML;
//alert(newcell.childNodes);
switch(newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "";
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break;
case "select-one":
newcell.childNodes[0].selectedIndex = 0;
break;
}
}
}
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if(null != chkbox && true == chkbox.checked) {
if(rowCount <= 1) {
alert("Cannot delete all the rows.");
break;
}
table.deleteRow(i);
rowCount--;
i--;
}
}
}catch(e) {
alert(e);
}
}
</SCRIPT>
以下是用于将mysql项目提取到选择组合框
的php代码<?php
$con = mysql_connect('connection details');
if (!$con) {
die('Could not connect: ' . mysql_error());}
$db=mysql_select_db('database',$con);
$extract1=mysql_query("query")
OR die(mysql_error());
$numrows1=mysql_num_rows($extract1);
echo "<select name='item[]' title='selectItemName'>";
echo "
<option>Select Item Description</option>
";
while ($row1=mysql_fetch_assoc($extract1))
{
$ic[]=$row1['ItemName'];
}
foreach ($ic as $i){
echo "<option>".$i."</option>";
}
echo "</select>";
mysql_close($con);
?>
我还尝试了jquery中的以下示例,它非常简洁。但我是新的,不知道如何填充其余的框和选择框。这是代码
<script type="text/javascript">
$(document).ready(function() {
$("select[multiple]").asmSelect({
addItemTarget: 'bottom',
animate: true,
highlight: true,
sortable: true
});
});
</script>
答案 0 :(得分:0)
选择组合~3500项?哎哟。 (行数为N?Double Ouch。)
认为可能是重新考虑实施的时候了。我可能会做一个弹出窗口或用于选择[关闭时]填充表单字段的项目。保持表单只保留值,而不是值+ 3500(行数)。
(我能给出的最好的例子是phpBB,当你在管理控制面板中选择你想要管理的用户时。它们弹出整个[filterable]数据库,然后将值带回父窗口。我可以看到这也有利于用户在3500个条目中找到一个项目,而不是滚动选择组合)
答案 1 :(得分:0)
我没有看到addRow
和deleteRow
被调用的地方,但我会说这里可能会出现一些低效率:
1. var table = document.getElementById(tableID);
2. var rowCount = table.rows.length;
3. var row = table.insertRow(rowCount);
4. var colCount = table.rows[0].cells.length;
每次添加一行时,您都在搜索文档中的表格,如果您只在一张桌子上工作,这会很昂贵;考虑一个全局变量并执行var table = glob_table || document.getElementById(..);
即使它是一个属性并且获取起来并不昂贵,但是当你可以增加/减少另一个全局变量时,这仍然是单调乏味的。
在将单元格添加到行之前,我不确定向表中添加行是否合适。我必须查看 更新: 我想这是
(与#2相同)
此外,如果您的数据库正在增加,那么您只需要使用尚未加载的项目来更新它,而不是重新创建选项。因此,您需要在数据库记录上使用timpestamp并将该时间戳存储在JavaScript /页面中以“刷新”(where update_ts >= $last_update_param
)