JavaScript返回';“南”;总共多少钱?

JavaScript返回';“南”;总共多少钱?,javascript,jquery,Javascript,Jquery,HTML/PHP: echo "<input type='checkbox' id='chk_esitmate' onchange='calculate_estimate(this);' name='" . $row['id'] ." value=". ($row['value'] ? $row['value']: '0') . "'/>"; var estimate = 0; function calculate_estimate(elem)

HTML/PHP:

echo "<input type='checkbox' id='chk_esitmate' onchange='calculate_estimate(this);' 
name='" . $row['id'] ." value=". ($row['value'] ? $row['value']: '0') .
"'/>";
var estimate = 0;

function calculate_estimate(elem)
                    {
                        var value = parseInt(elem.value, 10);
                        var status = jQuery('#span_estimate');  
                        if (elem.checked)
                        {   
                        window.estimate += value;
                        status.html(window.estimate);
                        }
                        else {
                        window.estimate -= value;
                        status.html(window.estimate);   
                        }
                    }

但是,每次单击复选框时,它都返回NaN(不是数字)。有人知道我哪里出错了吗?既然您已经在使用jQuery,我已经使用了parseInt,为什么不这样做呢:

var estimate = 0;

$('#chk_estimate').click(function() {

    var value = $(this).val();

    // do your stuff in here

});
在这里为我工作-


确保
calculate\u estimate
是在页眉中定义的,而不是在页脚中定义的。

您可以使用javascript了解复选框是否选中

if(document.getElementById('chk_estimate').checked==true)
{
var num=document.getElementById('chk_estimate').value;
        alert(num);  
}

鉴于我无法直接访问您的文件,这个答案大多是在黑暗中拍摄的,但它来自过去的经验。正如@SubirKumarSao所说,如果遇到的第一个字符无法转换为数字,parseInt将抛出NaN。这让我相信你从另一个网站复制了一个隐藏的角色。。这是处理此类错误时最常见的情况,当然字符也可能出现在
$row
数组中。除此之外

echo "<input type='checkbox' id='chk_esitmate' onchange='calculate_estimate(this);' 
name='" . $row['id'] ." value=". ($row['value'] ? $row['value']: '0') .
// missing quote here  ^ and ^ here
"'/>";
echo”“;
这条线路被窃听了;您忘记了在结束双引号标记之后和开始双引号标记之前的单引号标记,我留下了一条注释,指出缺少的单引号应该在哪里

线路应该是什么样子的:

echo "<input type='checkbox' id='chk_esitmate' onchange='calculate_estimate(this);' name='" . $row['id'] ."' value='". ($row['value'] ? $row['value']: '0') ."'/>";
echo”“;

好吧,我已经解决了这个问题,但这是一个我不理解的错误

我在页面上有javscript函数:
calculate\u estimate
calculate\u remain

我将全局变量
var estimate=0

在脚本的最顶端,我将
calculate\u remaining
函数放在它下面,然后在它下面是
calculate\u estimate
函数

我不知道为什么这会影响它,因为第一个函数没有使用
估计变量


很抱歉浪费了您的时间,感谢您的帮助

没有投票否决,但是如果您使用的是jquery,为什么要使用内联事件?如果第一个字符无法转换为数字,parseInt()将返回NaN。另外,您的代码也将返回NaN。你可能是从某个地方复制了这个php代码吗?是的,我是从我写的代码中复制的,并粘贴在这里…你这里也有一个明显的XSS错误。。。如果
$row['value']
包含:
'>
,该怎么办。您需要在
htmlspecialchars($data,entu QUOTES,'UTF-8')
中包装从DB到HTML的内容。(我创建了一个函数:
functionhtml($data){return htmlspecialchars($data,entu引号,'UTF-8');}
所以我只需要调用
value=”.html($data)。“
)。非常重要,因为黑客可以通过XSS窃取会话ID等。c.c这甚至不能解决这个问题。看,伙计,没有任何隐藏的字符。代码生成的html是:
,与报价后出现在网站上的html完全相同edits@StephenH很抱歉,我正试图用有限的信息在这里调试。隐藏字符似乎是这里唯一可能的原因,否则代码工作正常。请容忍我;保存生成的测试页面/网站的html内容,然后使用类似notpad++的代码编辑器,突出显示
=“38”
。假设您使用的编辑器计算选定的字符,如果一切正常,那么它当然应该为5。
echo "<input type='checkbox' id='chk_esitmate' onchange='calculate_estimate(this);' name='" . $row['id'] ."' value='". ($row['value'] ? $row['value']: '0') ."'/>";