如何在select元素中确定两个更改事件的优先级

时间:2011-03-16 15:37:52

标签: javascript jquery

我有一个选择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。

任何帮助都将受到高度赞赏

此致

Behnam Divsalar

3 个答案:

答案 0 :(得分:1)

事件发生后对顺序函数的简单回答是添加一个一个接一个地运行这两个函数的事件处理函数。

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

答案 1 :(得分:0)

如何将第一个函数的内容放在方法中:

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

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

然后在你更具体的功能 - function2:

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

请记住,我在函数2中使用了$(“select”)因为你说它是一个更通用的调用,所以这意味着你不会在第一个函数调用中使用id。

答案 2 :(得分:0)

未指定事件以任何特定顺序触发。

如果您需要特定订单,则需要从元处理程序调用它们,或者通过从另一个调用一个来链接它们。从长远来看,元处理程序更灵活。

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

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

$("select#myDropdownlist").change(firstHandler);