2013-06-03 19 views
0

有手風琴面板,每個面板在javascript中都有自己的變量。如何在jquery ajax中發佈單個事件,完成所有事件後?

我想將數據從使用類似POST請求的交易或隊列jQuery的每個面板保存。

每個小組由準備數據結合自身的事件onSave點擊。

//panel1 that prepares the data 
$("#save").click(function() { 
    globalvar['panel1'] = 'somedata'; 
}); 
//panel2 prepares the data 
$("#save").click(function() { 
    globalvar['panel2'] = 2*21+11; 
}); 

我怎樣才能讓AJAX請求,所有的面板已經準備他們的數據之後?

+0

你可以發佈你的HTML結構嗎? –

+0

@JudeDuran http://jsfiddle.net/igos/LLeuY/ –

回答

1

你可以做這樣的:假設你的面板數據不會被加載的onLoad, 類添加到每個面板。這個類意味着數據還未當數據被加載

$("#save").click(function() { 
    //code to load data 
    //Adjust according to your HTML structure 
    $(this).removeClass("noDataLoaded"); //encapsulate this when it has succeeded loading. 
    groupPost(); 
}); 

功能,如果所有數據已被加載,檢查加載特定面板

<div class="noDataLoaded"></div> 

卸下類

function groupPost() { 
    if($(".noDataLoaded").length == 0){ 
     $.ajax({ 
     //code 
     }); 
     } 
    } 

groupPost()只會在沒有使用noDataLoaded類的元素時觸發,並且只有在您單擊所有面板並加載其數據時纔會發生。

+0

是的,這可能是解決方案之一。我認爲jQuery有一個插件。 –

+0

謝謝你的小提琴!我已經檢查過jquery手風琴,看來沒有簡單的方法來實現你的目標。如果你對這個帖子中的答案不滿意,你必須找到另一個解決方法..如果你找到了一個好的答案,請發佈你的答案。謝謝! :) –

+0

我認爲沒有簡單的答案:/我想讓jQuery lib允許在不久的將來這樣的事情。 –

1
var dataToPost = new Array(); 
var isButton1Clicked = false; 
var isButton2Clicked = false; 

//panel1 
$("#save").click(function() { 
    isButton1Clicked = true; 
    dataToPost['panel'] = btoa($('#blob1').val()); 
    checkAndSubmit(); 
}); 
//panel2 
$("#save").click(function() { 
    isButton2Clicked = true; 
    dataToPost['panel2_amount'] = $('#multi').val() * $('#multi2').val() + 1; 
    dataToPost['crc32'] = crc32($('#blob2').val()); 
    checkToSubmit(); 
}); 


//some magic function 
function checkToSubmit() { 
//make only ONE ajax request, saving data from all panels 
if (isButton1Clicked && isButton2Clicked) { 
    $.ajax({ 
    type: 'POST' 
    data: dataToPost 
    }); 
} 
} 
+0

如果你想爲每個按鈕處理不同的響應,那麼你可以提供一個回調作爲函數的第三個參數。 – Ringo

+0

謝謝你的回答,但每次都會發布AJAX。我只想發佈一個請求。 –

+0

請求中需要哪些信息? – Ringo

相關問題