我使用print语句从php调用javascript函数打印出html代码,我传入一个整数。但是,在php中传递的值与javascript函数接收的数字不匹配,我不知道为什么。
这是调用javascript函数的php:
$upc = $items[$i]->GetUPC();
print "upc: " . $upc . "<br/>";
$delete = "<a href='#' onclick='removeFromCart(". $upc .")' ><img src='".$redx."' height='17' width='17' /></a>";
print语句打印出值:0011110416605
在页面上,使用视图源,这是以下标记:
<a href='#' onclick='removeFromCart(0011110416605)' >
这是被调用的javascript函数:
function removeFromCart(itemID){
var option = document.getElementById("select_cart");
var selected = option.options[option.selectedIndex].value;
alert(itemID);
loadCart(itemID,selected,"","remove");
}
警告框正在打印出号码:1226972549
我能理解它是否正在删除前导0,但这个数字完全不同。有谁知道为什么会这样?
答案 0 :(得分:7)
JavaScript认为它是八进制值(因为前导零和缺少大于7
的数字)。八进制0011110416605
的十进制值为1226972549
。例如:
> var value = 010; //10 in octal
> console.log(value);
> 8 //is 8 in decimal
改为使用字符串:
removeFromCart("0011110416605")
答案 1 :(得分:0)
通过创建一个名为“ tempcart”的隐藏文本来解决该问题,然后使用HTML或PHP为其赋值,它将使前导零保持为文本字符串。为了确保通过PHP传递它,请将其转换为字符串
HTML:
<input type='hidden' id='tempcart' value='0011110416605'>
PHP:
$itemID = '0011110416605';
$itemID = strval( $itemID );
echo "<input type='hidden' id='tempcart' value=$itemID >";
脚本:
function removeFromCart() {
var itemID = document.getElementById('tempcart').value;
alert(itemID);
//do whatever...
}
这只是示例编程,您需要将其放入程序中。我猜Javascript无法转换为八进制值(因为前导零和缺少大于7的数字),就像@Vivid之前提到的那样。
答案 2 :(得分:0)
您可以使用''引号
进行呼叫就像onchange =“ updateLineTotal {$ id,'{$ po101}')”;
只需将其包含在引号中,以便将其视为字符串而不是整数
答案 3 :(得分:-1)
我发现了此问题,并通过使用parseInt对其进行了修复:
itemID = parseInt('0011110416605',10);