带前导零的数字在JavaScript中更改


Number with leading zeroes gets changed in JavaScript

我正在使用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>";

打印语句打印出值: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,我可以理解,但这个数字完全不同。有人知道为什么会这样吗?

JavaScript认为它是一个八进制值(因为前导零和缺少大于7的数字)。八进制0011110416605的十进制值为1226972549。示例:

> var value = 010; //10 in octal
> console.log(value);
> 8  //is 8 in decimal

请改用字符串:

removeFromCart("0011110416605")

通过创建一个名为"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无法通过,因为@Vivid之前提到过转换为八进制值(因为前导零和缺少大于7的数字)。

您可以调用包含"引号的

类似onchange="updateLineTotal{$id,'{$po101}')";

只需将其包含在引号中,这样它就会将其视为字符串,而不是整数

我发现了这个问题,并使用parseInt:修复了它

itemID = parseInt('0011110416605',10);