我有两个元素,在执行时会执行相同的功能。如何合并这些脚本以使其更简洁?
//e_jumlah script
$("#t_jps_item").on('keyup','.e_jumlah',function(){
var par_jml = $(this).val().replace(/,/g , '');
var par_hrg = $(this).closest('tr').find('.e_harga').val().replace(/,/g , '');
var total = parseInt(par_jml) * parseFloat(par_hrg);
$(this).closest('tr').find('.e_total').val(total.toLocaleString());
});
//e_harga script
$("#t_jps_item").on('keyup','.e_harga',function(){
var par_hrg = $(this).val().replace(/,/g , '');
var par_jml = $(this).closest('tr').find('.e_jumlah').val().replace(/,/g , '');
var total = parseInt(par_jml) * parseFloat(par_hrg);
$(this).closest('tr').find('.e_total').val(total.toLocaleString());
});
答案 0 :(得分:1)
$("#t_jps_item").on('keyup','.e_jumlah , .e_harga ',function(event){
var par_jml = $(this).val().replace(/,/g , '');
//使用事件对象尝试获取类似于event.target的类,将受尊敬的类传递给find方法 var par_hrg = $(this).closest('tr')。find(event).val()。replace(/,/ g,'');
var total = parseInt(par_jml) * parseFloat(par_hrg);
$(this).closest('tr').find('.e_total').val(total.toLocaleString());
});
您可以传递多个选择器。 http://api.jquery.com/on/
答案 1 :(得分:1)
您可以将通用类添加到两个DOM中,然后为该类调用函数。在该类中,您可以使用唯一的类(最好是id)来获取值。
$(".container").on('keyup','.input-item',function(){
var par_jml = $('.e_jumlah').val().replace(/,/g , '');
var par_hrg = $('.e_harga').val().replace(/,/g , '');
var total = parseInt(par_jml) * parseFloat(par_hrg);
var total = parseInt(par_jml) * parseFloat(par_hrg);
$('.total').val(total.toLocaleString());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<input class="input-item e_jumlah" id="s1" placeholder="input1" value="0">
<input class="input-item e_harga" id="s1" placeholder="input1" value="0">
<input class="total">
</div>
答案 2 :(得分:0)
您可以将e_harga或e_jumlah作为arg传递给以下函数:
function convertSrting(passAnArgument){ //.e_harga or .e_jumlah
$("#t_jps_item").on('keyup',passAnArgument,function(){
var par_jml = $(this).val().replace(/,/g , '');
var par_hrg = $(this).closest('tr').find(passAnArgument).val().replace(/,/g , '');
var total = parseInt(par_jml) * parseFloat(par_hrg);
$(this).closest('tr').find('.e_total').val(total.toLocaleString());
});
}
以上功能现在充当普通功能
绑定两个元素的事件
convertSrting('.e_harga')
convertSrting('.e_jumlah')
希望有帮助
答案 3 :(得分:0)
将输入字段的引用传递给一个函数,在此我们定义要为两个元素都执行的主体。
function executeCode(e){
var par_jml = $(e.currentTarget).val().replace(/,/g , '');
var par_hrg = $(e.currentTarget).closest('tr').find('.e_harga').val().replace(/,/g , '');
var total = parseInt(par_jml) * parseFloat(par_hrg);
$(e.currentTarget).closest('tr').find('.e_total').val(total.toLocaleString());
}
$("#t_jps_item").on('keyup','.e_jumlah',function(e){
executeCode(e)
});
//e_harga script
$("#t_jps_item").on('keyup','.e_harga',function(e){
executeCode(e)
});
答案 4 :(得分:0)
您可以使用事件数据将.e_harga
或.e_jumlah
作为参数传递给公共事件处理程序回调,如下所示:
$("#t_jps_item").on('keyup','.e_jumlah',{classSelector: '.e_harga'},function(event){commonHandler(event);});
$("#t_jps_item").on('keyup','.e_harga',{classSelector: '.e_jumlah'}, function(event){commonHandler(event);});
function commonHandler(event){
var par = $(this).val().replace(/,/g , '');
var par_hrg_Or_jml = $(this).closest('tr').find(event.data.classSelector).val().replace(/,/g , '');
var total = parseInt(par) * parseFloat(par_hrg_Or_jml);
$(this).closest('tr').find('.e_total').val(total.toLocaleString());
}
此事件处理程序回调在这两个元素之间是常见的