gpt4 book ai didi

php - 在脚本中没有多个相同代码实例的情况下重复 javascript 功能

转载 作者:行者123 更新时间:2023-11-29 03:54:53 25 4
gpt4 key购买 nike

我没有 Java 脚本的应用知识,但正在努力学习它。

我有一个带有表格的 PHP 页面。该行的第一列有一个下拉列表。当触发 onclick 事件时,它会根据 php mysql 查询填充行中的其他单元格。

问题是我的表格最多可以包含 75 行,就像订单页面一样。我不希望使用不同的指针使用相同的 javascropt 代码 75 次?

是否有更简单的方法来优化页面并降低页面复杂性? (document.getElementById("txtHint1").innerHTML="";)

我可以使用 $(this) 吗?如果是这样,我该如何整合它?否则我有什么选择?

我的 php 页面如下。目前它适用于两行,但我需要提供 75 行。

<html>
<head>
<script type="text/javascript">
function showUser1(str)
{
if (str=="")
{
document.getElementById("txtHint1").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint1").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getdata1.php?q="+str,true);
xmlhttp.send();
}

</script>
<script type="text/javascript">
function showUser2(str)
{
if (str=="")
{
document.getElementById("txtHint2").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint2").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getdata1.php?q="+str,true);
xmlhttp.send();
}

</script>
</head>
<body>
<?

$con = mysql_connect('localhost', 'unilekxy_UL', 'Unilever2011');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("unilekxy_unilever", $con);


$skusql="SELECT packcode,concat(packcode, ' - ' , description) as description from skudata";
$resultsku=mysql_query($skusql);

$optionssku="";

while ($row=mysql_fetch_array($resultsku)) {

$sku=$row["packcode"];
$description=$row["description"];
$optionssku.="<OPTION VALUE=\"$sku\">".$description;
}

?>

<table border=1>
<tr>
<td width=393>Product</td>
<td width=200>Category</td>
<td width=150>Selling Unit</td>
<td width=150>Grouping</td>
<td width=150>Full Case QTY</td>
</tr>
</table>

<table>
<tr>
<td>
<select name="users" onchange="showUser1(this.value)" size=1>
<OPTION VALUE=0>
<?=$optionssku?>
</SELECT>
</td>
<td>
<div id="txtHint1"><b>SKU Details will be seen here</b></div>
</td>
</tr>

<tr>
<td>
<select name="users" onchange="showUser2(this.value)" size=1>
<OPTION VALUE=0>
<?=$optionssku?>
</SELECT>
</td>
<td>
<div id="txtHint2"><b>SKU Details will be seen here</b></div>
</td>
</tr>

</table>


</body>
</html>

调用执行mysql的php页面是

<?php
$q=$_GET["q"];

$con = mysql_connect('localhost', 'dbuser', 'dbpass');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("unilekxy_unilever", $con);

$sql="SELECT Category, SellingUnits,Grouping,CasesPerPallet,ShrinksPerPallet FROM skudata WHERE packcode = '".$q."'";

$result = mysql_query($sql);



while($row = mysql_fetch_array($result))
{
echo "<table border=1><tr>";
echo "<td width=200>".$row['Category']."</td>";
echo "<td width=150>".$row['SellingUnits']."</td>";
echo "<td width=150>".$row['Grouping']."</td><td width=150>";
if($row['SellingUnits']=="CS"){echo $row['CasesPerPallet'];} elseif($row['SellingUnits']=="SHR") {echo $row['ShrinksPerPallet'];}
echo "</td></tr></table>";
}

mysql_close($con);
?>

在此先感谢您的帮助,瑞安

最佳答案

您已经触及了最有值(value)的编程原则之一:不要重复自己 (DRY)。编程就是寻找最有效的方法来做某事。无论如何,这是重写 javascript 函数以使其更通用的最简单方法:

<script type="text/javascript">
function showUser(userNumber, str)
{
if (str=="")
{
document.getElementById("txtHint" + userNumber).innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint" + userNumber).innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getdata1.php?q="+str,true);
xmlhttp.send();
}
</script>

现在在你的每个表格行中,你的选择元素变成:

<select name="users" onchange="showUser(1, this.value)" size=1>

用行号替换“1”。

使用 jQuery 获取最接近的 txtHint 元素将是构建代码的更好方法,但这有点超出了问题的范围。

关于php - 在脚本中没有多个相同代码实例的情况下重复 javascript 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8857081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com