2011-03-16 38 views
1

我有一個select elemet的兩個更改事件處理程序。我們來調用函數Func1和Func2。當我初始化這些處理程序時,我執行Func1,然後執行Func2,但是當select元素中發生更改事件時,Func2會在Func1之前調用。如何優先選擇元素中的兩個更改事件

有什麼辦法來優先考慮這兩個功能。只是爲了讓你知道每個函數的初始化都在不同的腳本中。

這是我的代碼

SCRIPT1佈局:

$("select#myDropdownlist").change(function(){ 
    $(this).parents('form:first').submit(); 
    // form submit sends post request to update an object which is in session 
} 

SCRIPT2:

$("select#myDropdownlist").change(function(){ 
    Send an ajax request and return json result based on the changes happened to the object in script1 function 
} 

雖然我初始化這些通過序列不調用函數秩序。因爲它首先調用Func2,所以對象沒有更新,所以結果不正確,它會調用Func1,並且對象將被更新,這已經太遲了,因爲Func2已經基於先前版本的對象返回了結果。

另請注意,Script1是非常通用的,它應該適用於任何表單數據輸入頁面,其中Script2特定於特定頁面,並且我希望在select元素僅在頁。這意味着我無法在Func2中調用Func2。

任何幫助將高度讚賞

問候

貝赫南Divsalar

回答

1

簡單的答案訂購功能後的事件將添加運行後2個功能一個單一的事件處理函數另一個。

$("select#myDropdownlist").change(function(){ 
    callFirstFunction(); 
    callSecondAjaxFunction(); 
} 
0

如何把第一個函數的內容的方法:

$("select#myDropdownlist").change(function(){ 
    submitPostFunction1(); 
} 

submitPostFunction1 = function() { 
    //do function 1 stuff here 
} 

然後在更具體的功能 - 功能2:

$("select#myDropdownlist").change(function(){ 
    $("select").unbind(); 
    submitPostFunction1(); 
    //do function 2 stuff 
    $("select").bind("change", function() { 
    submitPostFunction1(); 
    }) 
} 

記住,我用$ (「選擇」),因爲你說它是一個更通用的調用,所以這意味着你不會在第一個函數調用中使用id。

0

未指定事件以任何特定順序觸發。

如果你想要一個特定的訂單,你需要從元處理程序中調用它們,或者通過從另一箇中調用它們來鏈接它們。元處理程序從長遠來看更加靈活。

$("select#myDropdownlist").change(function(){ 
    firstHandler(); 
    secondHandler(); 
} 

function firstHandler() { 
    ... 
    secondHandler(); 
} 
function secondHandler() { 
    ... 
} 

$("select#myDropdownlist").change(firstHandler); 
相關問題