【问题标题】:Javascript Function on PHP returned results, duplicate ID issuePHP 上的 Javascript 函数返回结果,重复 ID 问题
【发布时间】:2012-05-23 17:35:06
【问题描述】:

我想知道是否有人可以帮助我或引导我朝着正确的方向前进......基本上我有一个 Javascript 函数,它计算票价(来自 mysql 数据库)和数量(来自下拉菜单)。 Javascript 和 PHP 工作正常……但仅针对第一个结果,该功能不是动态的,确实需要帮助来解决这个问题。

在我的 PHP 中,从 SQL 语句返回一个表:

$postCodeSQL = "SELECT * FROM ticket WHERE locationID IN (SELECT locationID FROM location WHERE postCode LIKE '$pcSearch') ";

$postCoderesult = mysql_query($postCodeSQL) or die(mysql_error());

  while ($pcRow = mysql_fetch_assoc($postCoderesult)) {
                                $ID = $pcRow['ticketID']; //row in ticket table on database
                                $venue = $pcRow['venue'];
                                $ticketPrice = $pcRow['tPrice'];
                                $date = $pcRow['date'];
                                $time= $pcRow['time'];

                        echo "<tr>\n";
                                echo "<td id=\"venuePlace\">$venue <input type='hidden' id='venuePlaceHidden' class='venuePlaceHidden' value='".$venue."'></td>\n";
                                echo "<td id=\"ticketprice\">&pound;$ticketPrice <input type='hidden' id='ticketPriceHidden' class='ticketPriceHidden' value='".$ticketPrice."'></td>\n";
                                echo "<td >
                                        <select name =\"showQuantity\" id=\"showQuantity\" class =\"showQuantity\" onChange=\"calculateCost()\" >
                                                <option value=\"Select\">Select...</option>
                                                <option value=\"1\">1</option>
                                                <option value=\"2\">2</option>
                                                <option value=\"3\">3</option>
                                                <option value=\"4\">4</option>
                                                <option value=\"5\">5</option>
                                        </select>

                                    </td>\n";
                                echo "<td id=\"date\">$date <input type='hidden' id='dateHidden' class='dateHidden' value='".$date."'></td>\n";
                                echo "<td id=\"time\">$time <input type='hidden' id='timeHidden' class='timeHidden' value='".$time."'></td>\n";

                                echo "<td> <input type= \"button\" class= \"buyMe\" value= \"Buy\" name=\"buyMe\" onclick=\"grandTotal()\" > 
                                      </td>\n";


                        echo "</tr>\n";

                        }

插入隐藏字段,以便 Javascript 函数可以解析这些值。 JS 函数解析这些值并乘以票的成本 ($ticketPrice) 并将其乘以交付值:

function quantityChange() {
//Select the value of the drop down list       
var quantity = $('.showQuantity option:selected').val();
//get the value of the number from the tPrice column in 'ticket' table
var ticket = parseInt(document.getElementById('ticketPriceHidden').value);
//get the venue value
var venue = document.getElementById('venuePlaceHidden').value;
var date = document.getElementById('dateHidden').value;
var time = document.getElementById('timeHidden').value;
//multiply them together
var total = quantity * ticket;

return {
    venue: venue,
    quantity: quantity,
    ticket: ticket,
    date: date,
    time: time,
    total: total
};
}

function calculateCost () {
var data = quantityChange();

$('#summary').html('You have chosen '+ ' '  + data.quantity  + ' ' + 'tickets @' + ' ' + data.venue + ' = '  + ' ' +  '&pound;' + data.total);
}

如前所述,此函数适用于表返回的顶部结果,但是在我的表中返回的结果不止一个,JS 不适用于这些值。我的问题与重复 ID 有关,因为返回的每个结果都具有相同的 ID。

我已经给每个结果一个类,但我不能执行“getElementByClass”方法。 请问有人知道如何编辑此代码,以便 JS 函数适用于返回的其他结果吗?我有一种感觉,我可能需要一个 foreach() 循环来声明“对于返回的每个值,应用 JS 函数......”或类似的东西?

非常感谢任何帮助,我正在努力提高我的接受率!

【问题讨论】:

  • 首先它在继续之前罢工..您的查询是否应该更改为`“SELECT tkt.* FROM ticket tkt, location loc WHERE tkt.locationID =loc.locationID and loc.postCode LIKE '$ pcSearch' "` ?
  • 感谢您的回复,但 SQL 运行良好,不是问题。问题在于PHP中返回重复ID,无法实现动态行为。
  • 您正在为 元素设置重复的 ID。而不是将 $ID 连接到您创建的元素的 ID。
  • 这是个好主意,我会试试看...我会在哪里尝试 concat $ID 在代码中?即 echo "$venue.... 这将是 echo " $venue...*rest of code* ??

标签: javascript php function


【解决方案1】:

用动态Id试试这段代码......

<script>
function quantityChange(id) {
//Select the value of the drop down list       
var quantity = $('.showQuantity_'+id+'option:selected').val();
//get the value of the number from the tPrice column in 'ticket' table
var ticket = parseInt(document.getElementById('ticketPriceHidden_'+id).value);
//get the venue value
var venue = document.getElementById('venuePlaceHidden_'+id).value;
var date = document.getElementById('dateHidden_'+id).value;
var time = document.getElementById('timeHidden_'+id).value;
//multiply them together
var total = quantity * ticket;

    $('#summary_'+id).html('You have chosen '+ ' '  + quantity  + ' ' + 'tickets @' + ' ' + venue + ' = '  + ' ' +  '&pound;' + total);
}


</script>

<?php 

$postCodeSQL = "SELECT * FROM ticket WHERE locationID IN (SELECT locationID FROM location WHERE postCode LIKE '$pcSearch') ";
$postCoderesult = mysql_query($postCodeSQL) or die(mysql_error());

$i=0;
while ($pcRow = mysql_fetch_assoc($postCoderesult)) {
    $ID = $pcRow['ticketID']; //row in ticket table on database
    $venue = $pcRow['venue'];
    $ticketPrice = $pcRow['tPrice'];
    $date = $pcRow['date'];
    $time= $pcRow['time'];

echo "<tr>\n";
echo "<td id=\"venuePlace\">$venue <input type='hidden' id='venuePlaceHidden_$i' class='venuePlaceHidden' value='".$venue."'></td>\n";
echo "<td id=\"ticketprice\">&pound;$ticketPrice <input type='hidden' id='ticketPriceHidden_$i' class='ticketPriceHidden' value='".$ticketPrice."'></td>\n";
echo "<td >
<select name =\"showQuantity\" id=\"showQuantity_$i\" class =\"showQuantity\" onChange=\"quantityChange($i)\" >
<option value=\"Select\">Select...</option>
<option value=\"1\">1</option>
<option value=\"2\">2</option>
<option value=\"3\">3</option>
<option value=\"4\">4</option>
<option value=\"5\">5</option>
</select>

</td>\n";
echo "<td id=\"date\">$date <input type='hidden' id='dateHidden_$i' class='dateHidden' value='".$date."'></td>\n";
echo "<td id=\"time\">$time <input type='hidden' id='timeHidden_$i' class='timeHidden' value='".$time."'></td>\n";

echo "<td> <input type= \"button\" class= \"buyMe\" value= \"Buy\" name=\"buyMe\" onclick=\"grandTotal()\" > 
</td>\n";


echo "</tr>\n";
$i++;
echo "<div id = 'summary_$i'></div>";
}
?>

解释

<script>
function abc(id){
  alert('#ticketPriceHidden_'+id);
  var tph =  document.getElementById('ticketPriceHidden_'+id).value;

 if(tph == ''){
     alert('this field is required......');
 }

}
</script>


<a href="javascript:;" onclick="abc(1);">1</a>
<a href="javascript:;" onclick="abc(2);">2</a>

【讨论】:

  • 嘿!非常感谢您的帮助,我认为我在正确的路线上但是我不断收到错误:document.getElementById("ticketPriceHidden_​​" + id) is null 您有任何想法吗?谢谢
  • document.getElementById("ticketPriceHidden_​​" + id) 为空。来自: var ticket = parseInt(document.getElementById('ticketPriceHidden_​​'+id).value);抱歉,如果我第一次不清楚。
  • 啊,我想我明白你想向我展示什么。我的 PHP 有问题,因为返回的每个结果都会在表中添加一个输入按钮。因此,如果我尝试声明: onChange = quantityChange(1)...这仅适用于第一个结果,其他结果也会效仿。我真的很抱歉,我很难解释这种事情!基本上我在第一行中的输入按钮有效,但返回的第二个按钮没有显示正确的值。 :/我现在开始迷惑自己了哈哈。
  • 另外我没有提到也不知道是否有帮助,但场地和票价都存储在mysql数据库中。
【解决方案2】:

如果您有多个相同的 ID(用于不同的结果),那么最好将它们与数字一起使用:venuePlaceHidden_01, venuePlaceHidden_02

所以你需要在创建表格的代码和分析JS中的值的代码中添加圆圈和递增$num变量。

【讨论】:

  • 感谢您的回复。上面的 PHP 适用于该表中返回的所有结果,因此表中的结果 2 也将具有 ID 'ticketPriceHidden'、'venuePlaceHidden' 等,因此当调用 JS 函数时,它仅适用于返回的第一个结果。我需要一种将 $ID 传递给返回的每个结果的方法,以便每个返回的结果都有自己的值,如果这有意义吗?
  • 所以有问题,你需要解决,我在我的回答中指出:你需要更改代码,结果 2 将具有索引为 2 的 ID,依此类推,相同用于JS处理代码。这是多结果页面的通用解决方案,易于实现、清晰易懂且运行良好!
猜你喜欢
相关资源
最近更新 更多
热门标签