jQuery .change函数只工作一次

时间:2015-01-19 23:30:32

标签: javascript jquery select

使用jQuery 1.11.1和这段代码来检测select字段值的更改,然后运行一些脚本。它工作一次然后不会再次工作。它已足够远,可以删除“可见”字样。上课,那就是它。

var oatChoice;

$('#cereal').change(function(){

    oatChoice = ($(this).val());

    $('.oats').removeClass('visible').delay(1000).queue(function() {
        imageURL = '/assets/images/layers/oats-' + oatChoice;
        imgSwitch('.oats',imageURL);
        $('.oats').addClass('visible');
    });

});

imgSwitch = function(div,imgURL){
    $(div + ' img').remove();
    $(div).append('<img src="' + imgURL + '.png"/>');
}

我在下面的html位置运行此代码:

<div class="layer oats">
    <img src="/assets/images/layers/oats-applecinnamon.png" alt="">
</div>

<select name="cereal" id="cereal" class="form-control">
    <option value="">- Select A Cereal -</option>
    <option value="applecinnamon">Apple Cinnamon Oatmeal</option>
    <option value="vanilla">Vanilla</option>
</select>

我在这里创建了一个小提琴.. http://jsfiddle.net/aehj289o/1/图像丢失了,但你可以看到它在第一次出现后就退出了工作。

1 个答案:

答案 0 :(得分:0)

试试这个:

$('#cereal').unbind('change').change(function(){

    //the rest of your code

})

编辑:您可以尝试将您的变量和函数从全局范围中取出,并使用每个更改操作重新呈现该函数,如下所示:

(function(main, $, undefined){

    Template = {
        oatChoice:null,
        render: function(){
            Template.setup.changeActions();
        }
        setup: {
            changeActions : function(){
               $('#cereal').unbind('change').change(function(){
                   Template.oatChoice = ($(this).val());
                    $('.oats').removeClass('visible').delay(1000).queue(function() {
                        imageURL = '/assets/images/layers/oats-' + Template.oatChoice;
                        Template.imgSwitch('.oats',imageURL);
                        $('.oats').addClass('visible');
                    });
                    Template.render();
                });
            }
        },
        imgSwitch : function(div,imgURL){
            $(div + ' img').remove();
            $(div).append('<img src="' + imgURL + '.png"/>');
        },
    }

}(window.main = window.main || {}, jQuery));