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

时间:2011-03-17 14:08:22

标签: 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");
            }

        }                                                   
    });
});

但问题是我需要在keyup和

上启动它
 $(".industry_picker") 

已更改....我知道我可以复制这个确切的功能并且有一个

 $(".industry_picker").change 

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

$('#new_average, #max_occupancy").keyup 

$(".industry_picker").change  

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

3 个答案:

答案 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,这意味着每个都只有一个副本这些变量:factoraveragemax_occupancymax_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);