这是我的jquery,效果很好
$(document).ready(function(){
$('#new_average, #max_occupancy').keyup(function(){
factor = $(".industry_picker option:checked").attr("title");
average = $('#new_average').val();
if($('#new_average').val().indexOf("$") != -1){
average = average.substring(1);
}
if($("#max_occupancy").val() != ""){
max_occupancy = $("#max_occupancy").val();
max_total = ((average * factor) * max_occupancy) * 30;
if(factor != ""){
$("#new_calc").val("$" + max_total + ".00");
}
}
});
});
但问题是我需要在keyup和
上启动它 $(".industry_picker")
已更改....我知道我可以复制这个确切的功能并且有一个
$(".industry_picker").change
但我觉得这是一个黑客......有没有更好的方法来拥有
$('#new_average, #max_occupancy").keyup
和
$(".industry_picker").change
在相同的选择器中或更好的方法来实现这一点,而无需再次复制整个功能
答案 0 :(得分:5)
不要使用匿名功能。
function myCallback(){
factor = $(".industry_picker option:checked").attr("title");
average = $('#new_average').val();
if($('#new_average').val().indexOf("$") != -1){
average = average.substring(1);
}
if($("#max_occupancy").val() != ""){
max_occupancy = $("#max_occupancy").val();
max_total = ((average * factor) * max_occupancy) * 30;
if(factor != ""){
$("#new_calc").val("$" + max_total + ".00");
}
}
}
$('#new_average, #max_occupancy').keyup(myCallback);
$('.industry_picker').change(myCallback);
旁注: 您没有在任何地方使用var
,这意味着每个都只有一个副本这些变量:factor
,average
,max_occupancy
和max_total
。引入全局状态是草率编码,使程序更难维护和调试。 使用var
声明您的变量。
推荐阅读:MDC var
docs。
答案 1 :(得分:1)
您可以使用
$('#new_average, #max_occupancy').keyup(Myfunction);
$(".industry_picker").change(Myfunction);
function Myfunction(){
factor = $(".industry_picker option:checked").attr("title");
average = $('#new_average').val();
if($('#new_average').val().indexOf("$") != -1){
average = average.substring(1);
}
if($("#max_occupancy").val() != ""){
max_occupancy = $("#max_occupancy").val();
max_total = ((average * factor) * max_occupancy) * 30;
if(factor != ""){
$("#new_calc").val("$" + max_total + ".00");
}
}
}
答案 2 :(得分:1)
不要将函数直接分配给事件处理程序,而是分配给局部变量,并将其分配给:
var myHandler = function() { ... };
$('#new_average, #max_occupancy').keyup(myHandler);
$(".industry_picker').change(myHandler);