JQuery更改函数的问题

时间:2013-05-10 14:15:24

标签: javascript jquery ajax onchange

我有以下.change()功能:

$('#accmenu').change(function() {
    $(".insightsgraphs div").hide();
    $(".insightsoptions input").removeClass("green");
    $("#newLikes").one('click', function () {
        $.ajax({type:'GET', url: 'newLikes.php', data:$('#ChartsForm').serialize(), success:
            function(response) {
                var json = response.replace(/"/g,'');
                json = "[" + json + "]";
                json = json.replace(/'/g,'"');
                var myData = JSON.parse(json);
                var myChart = new JSChart('dailyNewLikes', 'line');
                myChart.setDataArray(myData);
                myChart.setSize(960, 320);
                myChart.setAxisNameX('');
                myChart.setAxisValuesColorX('#FFFFFF');
                myChart.setAxisNameY('');
                myChart.setTitle('Daily New Likes');
                myChart.draw();
            }});
        return false;
    });
    $("#newLikes").on('click', function(){
        $(this).toggleClass('green');
        $('#dailyNewLikes').toggle();
        return false;
    });
    $("#unlikes").one('click', function () {
        $.ajax({type:'GET', url: 'unlikes.php', data:$('#ChartsForm').serialize(), success:
            function(response) {
                alert(response);
                $("#dailyUnlikes").html(response);
            }});
        return false;
    });
    $("#unlikes").on('click', function(){
        $(this).toggleClass('green');
        $('#dailyUnlikes').toggle();
        return false;
    });
});

任何时候我从accmenu选择更改选项以隐藏与insightsgraphs类对应的所有div,并从其所有输入中删除绿色类。在我选择了四个选项中的一个之后,一切都按照它应该工作但是如果我选择另一个,则单击按钮不会变为绿色,并且也不会显示div。它没有运行这段脚本:

$("#newLikes").on('click', function(){
    $(this).toggleClass('green');
    $('#dailyNewLikes').toggle();
    return false;
});

应该在按钮的绿色和红色之间切换,并且它应该隐藏或显示div。例如,对于第二个选项,ajax调用正确,但按钮没有获得绿色类,并且未显示相应的div。我的代码有什么问题?是什么导致了这个问题?另一件奇怪的事情是,第3个选项正在运行,但第4个选项没有......

1 个答案:

答案 0 :(得分:1)

我检查了你的代码。看来你把一些事件放在了“改变”事件中。触发更改后,此处的所有事件将再次重新运行。所以这会导致你的功能出现问题。最好将这些事件与更改分开,并创建一个闭包函数,以便您可以从外部获取所需的数据。