如何为此添加选择器更改事件?

Mat*_*iby 0 javascript jquery

这是我的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");
            }

        }                                                   
    });
});
Run Code Online (Sandbox Code Playgroud)

但问题是我需要这个来启动keyup和on

 $(".industry_picker") 
Run Code Online (Sandbox Code Playgroud)

改变....我知道我可以复制这个确切的功能,并有一个

 $(".industry_picker").change 
Run Code Online (Sandbox Code Playgroud)

但我觉得这是一个黑客...是否有一个更好的方式来拥有

$('#new_average, #max_occupancy").keyup 
Run Code Online (Sandbox Code Playgroud)

$(".industry_picker").change  
Run Code Online (Sandbox Code Playgroud)

在相同的选择器或更好的方式实现这一点,而无需再次复制整个功能

Mat*_*all 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);
Run Code Online (Sandbox Code Playgroud)

旁注:你不使用var任何地方,这意味着只有一个每个变量的副本:factor,average,max_occupancy,和max_total.引入全局状态是草率编码,使程序更难维护和调试.用你的变量声明你的变量var.

推荐阅读:MDC var文档.

  • @Tamer:其符号在范围内的任何地方,您可以在其中连接处理程序,这意味着在全局范围内或在封闭的函数调用内(如您的`ready`处理程序).请注意,将它放在准备好的处理程序中会阻止它被添加到全局命名空间中,如果这是您使用它的唯一地方,这是一件好事.(我通常将整个页面逻辑放在一个封闭的函数中,根本不暴露任何公共符号.) (2认同)