Javascript 绑定到jQuery:输入不是触发事件

Javascript 绑定到jQuery:输入不是触发事件,javascript,jquery,Javascript,Jquery,这是我运行它时不起作用的代码。请告诉我遗漏了什么或哪里出了错 $(':input').bind('keypress keydown keyup change', function() { var acho = parseFloat($(':input[name="acho"]').val(),10), alto = parseFloat($(':input[name="alto"]').val(),10), matl = parseFloat($(':in

这是我运行它时不起作用的代码。请告诉我遗漏了什么或哪里出了错

$(':input').bind('keypress keydown keyup change', function() {
    var acho = parseFloat($(':input[name="acho"]').val(),10),
        alto = parseFloat($(':input[name="alto"]').val(),10),
        matl = parseFloat($(':input[name="material"]').val(),10);
        cat = parseFloat($(':input[name="category"]').val(),10);

    var v = '';

    if (!isNaN(acho) && !isNaN(alto) && !isNaN(matl)){
        v = cat*(matl / 100) / ((alto / 100) * (acho / 100));
    }

    $(':input[name="ml"]').val(v.toString());

​});​

您的变量定义有问题:

matl = parseFloat($(':input[name="material"]').val(),10);
此行后面应该有一个逗号,表示后续变量赋值的b/c。我会投v只是为了更好的衡量

var acho = parseFloat($(':input[name="acho"]').val()),
    alto = parseFloat($(':input[name="alto"]').val()),
    matl = parseFloat($(':input[name="material"]').val()),
    cat = parseFloat($(':input[name="category"]').val()),
    v = '';
还从parseFloat中删除了无效的基数参数

更正代码:

$(':input').bind('keypress keydown keyup change', function() {
    var acho = parseFloat($(':input[name="acho"]').val()),
        alto = parseFloat($(':input[name="alto"]').val()),
        matl = parseFloat($(':input[name="material"]').val()),
        cat = parseFloat($(':input[name="category"]').val()),
        v = '';

    if ( !isNaN(acho) && !isNaN(alto) && !isNaN(matl) ){
        v = cat*(matl / 100) / ((alto / 100) * (acho / 100));
    }

    $(':input[name="ml"]').val( v.toString() );
});
您的代码主要工作如下:

确保它位于document.ready处理程序中 从parseFloat中删除10基数参数-它不受支持 不要注册keyXXX函数-其中一些函数在按下的键被添加到输入值之前被调用 使用HTML5的输入事件和更改 别忘了测试猫的isNaN[啊,这是一个下拉列表-没关系] 确保正确声明了每个var 我的工作版本(修改最少)位于,并且是一个已清理的版本:

$(':input').bind('input change', function() {

    // don't repeat yourself - also strips whitespace
    function val(f) {
        var $el = $(':input[name="' + f + '"]');
        return parseFloat($.trim($el.val()));
    }

    var acho = val('acho'),
        alto = val('alto'),
        matl = val('material'),
        cat = val('category');

    if (isNaN(acho) || isNaN(alto) || isNaN(matl)) {
        return;
    }

    var v = cat * (matl / 100) / ((alto / 100) * (acho / 100));
    $(':input[name="ml"]').val(v);
});​

中,您的标题没有提供有关该问题的信息。您是否可以制作一个jsFiddle.net?我不确定这段代码想要实现什么。Parseffloat不带基数参数。@JonathanWood是的,问题本身没有说太多。-1感谢没有说它是如何工作的。dystroy得到了下面的答案,但这仍然是一个措辞糟糕的问题+1对于dystroy来说,从操作中完全缺乏细节来了解它。你是对的,但这不是根本问题,它只会导致cat成为一个全局而不是局部。你能看到我在这里试图实现什么吗,点击这个链接@Vic Yes。Firebug在脚本中显示错误:错误:SyntaxError:参数列表行:29,列:60后缺失源代码:matl=parseFloat$':input[name=material]'。val,10;您缺少结尾部分,需要删除radixpress请检查这里的全部代码,javascript部分就是问题所在。将JS粘贴到JSLint中:我的代码也可以在JSFIDLE.net上运行,而不是通过其他html。检查我的JSFIDLE代码。我需要它在我的html页面工作too@Vic您没有使用document.ready handler-jsfiddle自动将您的代码打包成一个,因此代码在那里工作而在您自己的站点上不工作是很常见的。您好@Alnitak,您能粘贴完整的代码吗?这样我就可以了解为什么我的代码尽管我已经做了更正,但仍然无法工作-这是您唯一需要的将整个代码包装在$document.readyfunction{…}中,其中。。。是上面的代码。