Search code examples
jqueryonchangeonload

Combine onLoad and Change functions?


Is there a way to simplify and combine these 2 functions? I'm doing this for a large number of elements and it's quickly becoming far too cumbersome.

I've uploaded a working example of the code here: http://jsfiddle.net/JFJSA/5/

$(document).ready(function () {
    var goalVal = $("[name=objective]").val();
    $("#goal_Minimize, #goal_Maximize, #AltScenario").hide();
    if (goalVal === "Minimize") {
        $("#goal_Minimize").show();
    } else if (goalVal == "Maximize") {
        $("#goal_Maximize").show()
    } else if (goalVal == "AltScenario") {
        $("#AltScenario").show()
    };
});
$("[name=objective]").change(function () {
    var goalVal = $("[name=objective]").val();
    $("#goal_Minimize, #goal_Maximize, #AltScenario").hide();
    if (goalVal == "Minimize") {
        $("#goal_Minimize").show();
    } else if (goalVal == "Maximize") {
        $("#goal_Maximize").show()
    } else if (goalVal == "AltScenario") {
        $("#AltScenario").show()
    };
});

Solution

  • Yep, just replace your anonymous functions with a normal one:

    var doTheThing = function() {
        var goalVal = $("[name=objective]").val();
        $("#goal_Minimize, #goal_Maximize, #AltScenario").hide();
        if (goalVal === "Minimize") {
            $("#goal_Minimize").show();
        } else if (goalVal == "Maximize") {
            $("#goal_Maximize").show()
        } else if (goalVal == "AltScenario") {
            $("#AltScenario").show()
        };
    };
    
    $(document).ready(doTheThing);
    $("[name=objective]").change(doTheThing);