确保事件在另一个事件的操作之后执行

时间:2014-10-02 21:29:33

标签: javascript jquery html

假设我有一个文件,我将事件绑定到一些输入,用于解析和格式化日期与moment.js,例如:

// plugins.js
$('.date').on('focusout', function() {
    var thisInput = $(this);
    thisInput.val( moment(thisInput.val()).format('YYYY-MM-DD') );
});

在我的html文件中,我在plugins.js调用之后有一个脚本,在这个脚本中我使用解析日期来计算日期的年龄,假设该函数已在plugins.js中执行:

<form>
    <div class="form-group">
        <label for="birth-date-input">Birth date</label>
        <input type="text" id="birth-date-input" class="date">
    </div>
    <div class="form-group">
        <label for="age">Age</label>
        <input type="text" id="age">
    </div>
</form>

<script src="plugins.js"></script>
<script>
    jQuery(document).ready(function($) {
        $('#birth-date-input').on('focusout', function() {
            var thisInputVal = $(this).val();
            var birthDate = moment(thisInputVal, 'YYYY-MM-DD');
            var age = moment().diff(birthDate, 'years');
            $('#age').val( age );
        });
    });
</script>

在我理想的单词中,第二个脚本的.val()将在第一个解析日期中分配。但事实是,在这两种情况下,价值是相同的,我做这项工作的唯一方法就是使用脏setTimeout()

$('#birth-date-input').on('focusout', function() {
    setTimeout(function() {
        var thisInputVal = $(this).val();
        var birthDate = moment(thisInputVal, 'YYYY-MM-DD');
        var age = moment().diff(birthDate, 'years');
        $('#age').val( age );
    }, 100);
});

有没有其他方法可以做到这一点?确保事件在另一个事件[没有setTimeout] ...

的动作之后执行

1 个答案:

答案 0 :(得分:0)

您可以在任何其他代码之前调用您想要在第二个函数内首先执行的函数。所以必须首先执行。

&#13;
&#13;
function a()
{

  alert("first");
return true;
}
function b
{

  b();
  alert("second");
}
&#13;
&#13;
&#13;  或者你可以在执行第一个功能时设置一个隐藏变量,并检查它是否在第二个功能中设置。