2011-03-16 41 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); 
相关问题