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

时间:2012-11-07 21:10:53

标签: 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($(':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());

​});​

2 个答案:

答案 0 :(得分:2)

您的变量定义存在问题:

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() );
});

答案 1 :(得分:0)

您的代码主要是有效:

  1. 确保它位于document.ready处理程序
  2. 10中移除parseFloat基数参数 - 不支持
  3. 不在keyXXX函数上注册 - 其中一些函数在按下的键被添加到输入值之前被调用
  4. 使用HTML5的input事件(和change)代替
  5. 不要忘记为cat测试isNaN [啊,这是一个下拉列表 - 没关系]
  6. 确保每个var都已正确声明
  7. 我的工作版本经过最少的修改,位于http://jsfiddle.net/alnitak/6hNQ2/,已清理版本:

    $(':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);
    });​
    

    http://jsfiddle.net/alnitak/4Xw3D/