我有以下代码
$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 ) );
}
}
});
});
运行良好。但令我不安的是重复的部分。请注意,focusout
和keyup
具有相同的代码。我可以在不使用函数()的情况下简化它吗?
keyup, focusout: function(){
的内容,但它不起作用。var ini = $j( this );
一次,但我可以在任何方法(动作??)中访问它,即内部焦点,焦点等。谢谢。
答案 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)
解决方案比接受的答案简单得多。
要将同一个侦听器添加到多个事件,请使用
'keyup focusout': function() { ... }
在对象文字中。
要重用变量ini
,请在外部函数中声明它,如下所示:
$j(document).ready(function(){
var ini = $j('#uang');
ini.on({ ... });
});
即使在外部函数返回后,处理程序也可以访问变量,因为JavaScript有闭包。