简化代码

时间:2014-05-06 08:57:06

标签: javascript jquery

我有以下代码

$j(document).ready(function(){
    $j('#uang').on({
        focus: function(){
            var ini = $j( this );
            var theVal = accounting.unformat( ini.val() , ',' );
            var data = ( theVal == 0 ? '' : theVal);

            ini.val( data ).select();
        },
        focusout: function(){
            var ini = $j( this );
            var kembalian = $j('#kembalian');

            var val = accounting.unformat( ini.val() , ',' );
            var cicilan_val = $j('#cicilan');
            var cicilan = accounting.unformat( cicilan_val.val() , ',');
            if( val > 0 ){
                var nilai_kembalian = val - cicilan;
                kembalian.val( accounting.formatNumber( nilai_kembalian ) );
            }
        },
        keyup: function(){
            var ini = $j( this );
            var kembalian = $j('#kembalian');

            var val = accounting.unformat( ini.val() , ',' );
            var cicilan_val = $j('#cicilan');
            var cicilan = accounting.unformat( cicilan_val.val() , ',');

            if( val > 0 ){
                var nilai_kembalian = val - cicilan;
                kembalian.val( accounting.formatNumber( nilai_kembalian ) );
            }
        }
    });
});

运行良好。但令我不安的是重复的部分。请注意,focusoutkeyup具有相同的代码。我可以在不使用函数()的情况下简化它吗?

  1. 我尝试了类似keyup, focusout: function(){的内容,但它不起作用。
  2. 如何/在哪里可以写var ini = $j( this );一次,但我可以在任何方法(动作??)中访问它,即内部焦点,焦点等。
  3. 谢谢。

4 个答案:

答案 0 :(得分:2)

如果您不愿意使用function(),那么这可能是一个选项 -

$j(document).ready(function(){
    $j('#uang').on('focus', function(){
            var ini = $j( this );
            var theVal = accounting.unformat( ini.val() , ',' );
            var data = ( theVal == 0 ? '' : theVal);

            ini.val( data ).select();
      }).on('focusout keyup', function(){
            var ini = $j( this );
            var kembalian = $j('#kembalian');

            var val = accounting.unformat( ini.val() , ',' );
            var cicilan_val = $j('#cicilan');
            var cicilan = accounting.unformat( cicilan_val.val() , ',');
            if( val > 0 ){
                var nilai_kembalian = val - cicilan;
                kembalian.val( accounting.formatNumber( nilai_kembalian ) );
            }
    });
});

答案 1 :(得分:0)

没有经过测试,但尝试类似的东西。

    $j(document).ready(function(){
        var myfunction = function(){
                var ini = $j( this );
                var kembalian = $j('#kembalian');

                var val = accounting.unformat( ini.val() , ',' );
                var cicilan_val = $j('#cicilan');
                var cicilan = accounting.unformat( cicilan_val.val() , ',');

                if( val > 0 ){
                    var nilai_kembalian = val - cicilan;
                    kembalian.val( accounting.formatNumber( nilai_kembalian ) );
                }
            };
        $j('#uang').on({
            focus: function(){
                var ini = $j( this );
                var theVal = accounting.unformat( ini.val() , ',' );
                var data = ( theVal == 0 ? '' : theVal);

                ini.val( data ).select();
            },
            focusout: myfunction,
            keyup: myfunction
        });
    });

答案 2 :(得分:0)

试试这个

$j(document).ready(function(){

    $j('#uang').on({
        focus: function(){
            var ini = $j( this );
            var theVal = accounting.unformat( ini.val() , ',' );
            var data = ( theVal == 0 ? '' : theVal);

            ini.val( data ).select();
        }
    });

   $j('#uang').on('focusout, keyup', function(){
            var ini = $j( this );
            var kembalian = $j('#kembalian');

            var val = accounting.unformat( ini.val() , ',' );
            var cicilan_val = $j('#cicilan');
            var cicilan = accounting.unformat( cicilan_val.val() , ',');
            if( val > 0 ){
                var nilai_kembalian = val - cicilan;
                kembalian.val( accounting.formatNumber( nilai_kembalian ) );
            }
    });
});

答案 3 :(得分:0)

解决方案比接受的答案简单得多。

  1. 要将同一个侦听器添加到多个事件,请使用

    'keyup focusout': function() { ... }
    

    在对象文字中。

  2. 要重用变量ini,请在外部函数中声明它,如下所示:

    $j(document).ready(function(){
        var ini = $j('#uang');
        ini.on({ ... });
    });
    

    即使在外部函数返回后,处理程序也可以访问变量,因为JavaScript有闭包。