[英]Make sure that an event execute after the actions of another one
假设我有一个文件,其中将事件绑定到一些输入,例如,使用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()
将在第一个.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] ...
您可以在第二个函数中先调用要执行的函数,然后再调用其他任何代码。 所以它必须先执行。
function a() { alert("first"); return true; } function b { b(); alert("second"); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.