2013-05-10 38 views
0

我有以下.change()功能:使用jQuery變函數問題

$('#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未顯示。我的代碼有什麼問題?什麼導致這個問題?另一個奇怪的是,第三個選項工作,但第四個不...

+1

你不應該綁定**事件處理程序中的事件處理程序** – Ian 2013-05-10 14:18:15

+1

Ian說的。嘗試將您的點擊處理程序移動到.change()函數的範圍之外。 – 2013-05-10 14:21:40

+0

感謝您的指導。 :) 有用! – 2013-05-10 14:22:20

回答

1

當我檢查你的代碼。看起來你把一些事件放在「更改」事件中。這個問題在這裏,當變化被觸發時,所有的事件都會重新運行。所以這會導致您的功能出現問題。最好將變化之外的事件分開,並創建一個閉包函數,以便您可以從外部獲取所需的數據。