带有前导零的数字在JavaScript中会发生变化

时间:2013-11-21 17:48:01

标签: javascript php html5

我使用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,但这个数字完全不同。有谁知道为什么会这样?

4 个答案:

答案 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);