jquery等待改变事件

时间:2017-06-28 08:53:55

标签: javascript jquery

使用jQuery我构建了一个动态表单;当第一个选择输入(名为category)更改第二个选择输入(名为subcategory)时,将显示子选项。而这现在很完美。

当给出特定的url参数时,我想在页面准备好后自动填写表单。

$(document).ready(function () {
    // initialize defaults
    var category = getUrlParameter('category');
    var subcategory = getUrlParameter('subcategory');
    if (category && subcategory) {
        $("select#category").val(category).change();
        $("select#subcategory").val(subcategory).change();
    }
});

getUrlParameter是我从Sameer Kazi复制的辅助函数。

目前第一个选择输入已填入,第二个选择输入已生成但未填写。实际上,更改命令需要等待,直到第一个更改命令准备就绪。

4 个答案:

答案 0 :(得分:2)

setTimeout(function(){
$("select#subcategory").val(subcategory).change();
},300);

也许这个? 等待300毫秒,直到做出其他更改。我想这足以让第一个完成:)

答案 1 :(得分:2)

您可以使用jQuery的.when()函数,该函数在调用 .then()之前首先处理异步函数。

$.when($("select#category").val(category).change()).then(function() {
  $("select#subcategory").val(subcategory).change();
});

以下是使用这两个功能的小例子。我在select变更事件处理程序中添加了console.log函数,以便您可以按照所发生的情况进行操作。

$("select#category").on('change', function() {
  console.log('[on change] category changed');
  $("select#subcategory").show();
});

$("select#subcategory").on('change', function() {
  console.log('[on change] subcategory changed');
});

$(document).ready(function () {
    // initialize defaults
    var category = 1;
    var subcategory = 2;
    if (category && subcategory) {
        $.when($("select#category").val(category).change()).then(function() {
            console.log('[then] activating subcategory');
            $("select#subcategory").val(subcategory).change();
        });
    }
});
select#subcategory {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="category">
 <option>...</option>
 <option value="1">value 1</option>
 <option value="2">value 2</option>
</select>
 
 <select id="subcategory">
   <option value="1">subvalue 1</option>
   <option value="2">subvalue 2</option>
 </select>

答案 2 :(得分:0)

$("select#category").on("load",function(){
    $("select#subcategory").val(subcategory).change();
});

如果我遇到你的问题,也许这会有用

答案 3 :(得分:0)

也许你可以听取事件$("select#category").on("change",function(){ $("select#subcategory").val(subcategory).change(); });

$("select#category").val(category).change();

也代替$("select#category").val(category).trigger('change'); 尝试 ps -aef|grep odoo