2014-01-16 52 views
1

我試圖用「運輸單選按鈕」的值更新$total_charge變量,而不必刷新或提交頁面。我相信這可以使用JavaScript來完成,但我不知道如何。我使用的代碼如下。根據單選按鈕選擇自動更新.php變量的值而不提交或刷新

有什麼建議嗎?

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 

<?php 
$qty = $_POST["qty"]; 
$style = $_POST["style"]; 
$price = $_POST["price"]; 

$lense = $_POST["lense"]; 
$lense_chunks = explode("|", $lense); 
$tax = .08*(($price+$lense_chunks[1])*$qty); 
$total_charge = ($tax + $shipping) + (($price+$lense_chunks[1])*$qty); 

?> 


</head> 

<body> 
<p><strong>Price</strong> = <?php echo $price;?> <br /> 
    <strong>QTY</strong> = <?php echo $qty;?> 
    <br /> 
    <strong>Style</strong> = <?php echo $style;?> 
    <br /> 
    <strong>Lense</strong> = <?php echo $lense_chunks[0];?> 
    <br /> 
    <strong>Lense Fee</strong> = <?php echo $lense_chunks[1];?> 
    <br /> 
    <strong>Tax</strong> = <?php echo $tax;?><br /> 
    <strong>Shipping</strong> = Standard ($5.00) 
<label> 
    <input name="shipping" type="radio" id="RadioGroup1_0" value="5.00" checked="checked" /> 
</label> 
    Overnight ($20.00) 
    <input type="radio" name="shipping" value="20.00" id="RadioGroup1_0" /> 
    <br /> 
    <strong>Total Charge</strong> = <?php echo $total_charge;?> 
</p> 
</body> 
</html> 

回答

1

您可能不喜歡PHP在服務器端運行,在客戶端運行HTML/JS/CSS。 PHP是一種腳本語言,它意味着當您的瀏覽器接收到該頁面時,您的腳本不再存在,因此當您單擊您的單選按鈕時,您的變量不再存在。

,你可以:

  • 使用Ajax發送到沒有任何刷新運行腳本的請求。
  • 使用會話保持與當前用戶關聯的變量(通過頁面加載)。
  • 用JavaScript編輯顯示的總數。

對於第三個選項,您應該隔離需要編輯的內容,使用輸入標籤或任何其他標籤(根據上下文和需要)。 然後,你可以使用jQuery來輕鬆地操縱它:

$("input[name=shipping]").change(function() { 
    $(this).val();// The value of the checked radio button 
    $("#TotalCharge").text("New value");//text() to edit text of you total charge tag with id="TotalCharge". .html() is an alternative to write HTML. 
}); 

當我在寫這個代碼,我看見你正在使用兩種不同的HTML元素,這對禁止(實際上相同的ID,這是一個常見的錯誤但它不能做你想做的),更喜歡使用一個類。

如果需要,您可以使用其他值的隱藏輸入。 (但你也可以從標籤內容或數據中獲得)

請參閱jQuery文檔以獲得更多關於它的信息。

+0

Loenix,感謝您的建議。我知道.php是'服務器端'語言,JavaScript是'客戶端'語言。我不熟悉的是'如果'他們可以共享數據或彼此溝通。你的第三個選項,「用JavaScrip編輯顯示的總數」聽起來就像我想要做的。您可以提供的任何幫助,我的學生和我將非常感激。謝謝。 –

+0

我剛剛編輯了我的答案。 – Loenix

2

PHP是一種服務器語言,Javascript是客戶端語言。 要更新$ total_charge,您必須使用新值向您的服務器發送http請求。

但在HTML頁面的視覺效果,請使用javascript:

<head> 
    <?php 
    $qty = $_POST["qty"]; 
    $style = $_POST["style"]; 
    $price = $_POST["price"]; 

    $lense = $_POST["lense"]; 
    $lense_chunks = explode("|", $lense); 
    $tax = .08*(($price+$lense_chunks[1])*$qty); 
    $total_charge = ($tax + $shipping) + (($price+$lense_chunks[1])*$qty); 
    ?> 
    <script> 
    function refreshTotalCharge(value){ 

    var tax   = <?php echo $tax; ?>; 
    var shipping  = <?php echo $shipping; ?>; 
    var lense_chunks1 = <?php echo $lense_chunks[1]; ?>; 
    var qty   = <?php echo $qty; ?>; 

    document.getElementById("totalCharge").innerHTML= (tax + shipping) + ((value + lense_chunks1) * qty); 
    } 
    </script> 
</head> 
<body> 
    <p> 
    <strong>Price</strong> = <?php echo $price;?> <br /> 
    <strong>QTY</strong> = <?php echo $qty;?> 
    <br /> 
    <strong>Style</strong> = <?php echo $style;?> 
    <br /> 
    <strong>Lense</strong> = <?php echo $lense_chunks[0];?> 
    <br /> 
    <strong>Lense Fee</strong> = <?php echo $lense_chunks[1];?> 
    <br /> 
    <strong>Tax</strong> = <?php echo $tax;?><br /> 
    <strong>Shipping</strong> = Standard ($5.00) 
    <label> 
     <input name="shipping" type="radio" id="RadioGroup1_0" value="5.00" checked="checked" onClick="refreshTotalCharge(this.value);" /> 
    </label> 
    Overnight ($20.00) 
    <input type="radio" name="shipping" value="20.00" id="RadioGroup1_0" onClick="refreshTotalCharge(this.value);"/> 
    <br /> 
    <strong>Total Charge</strong> = <span id="totalCharge"><?php echo $total_charge;?></span> 
    </p> 

</body> 
1

確實是這樣,你應該使用javascript由於要發送到服務器之前更新變量值的事實,那就是什麼javascript代表,操縱DOM對象。
創建一個包含所有變量的javascript腳本,在javascript上進行計算,然後將總收費解析到PHP變量,我想這會將數據發送到您的表格。
不要忘記使用parseInt以避免小數點混亂。

我想將javascript擴展爲php值解析。只需通過javascript更改DOM對象值document.getElementById().value,更改分配總費用的輸入字段的值。發送表單時,服務器將通過$ _POST得到j javascript計算的值。

2

您可以使用JavaScript更新顯示給用戶的總數。

由r3tep的代碼應該工作。

我已經把它放在一個的jsfiddle你:http://jsfiddle.net/ASZcL/

的JavaScript:

var total_without_shipping = '<?php echo $total_charge_without_shipping;?>'; 

function updateTotal(shipping_cost) { 
    total_cost = parseInt(total_without_shipping) + parseInt(shipping_cost); 
    document.getElementById('total').innerHTML = total_cost; 

} 

而且用PHP形式:

<p><strong> 

    Price</strong> = 
     <?php echo $price;?> 
     <br /> <strong>QTY</strong> = 
     <?php echo $qty;?> 
     <br /> <strong>Style</strong> = 
     <?php echo $style;?> 
     <br /> <strong>Lense</strong> = 
     <?php echo $lense_chunks[0];?> 
     <br /> <strong>Lense Fee</strong> = 
     <?php echo $lense_chunks[1];?> 
     <br /> <strong>Tax</strong> = 
     <?php echo $tax;?> 
     <br /> <strong>Shipping</strong> = Standard ($5.00) 
     <label> 
      <input name="shipping" type="radio" id="RadioGroup1_0" value="5.00" checked="checked" onclick="updateTotal(this.value)" /> 
     </label>Overnight ($20.00) 
     <input type="radio" name="shipping" value="20.00" id="RadioGroup1_0" onclick="updateTotal(this.value);" /> 
     <br /> <strong>Total Charge</strong> = <span id="total">100</span> 

    </p>