在确认jquery之前执行功能

时间:2017-07-28 03:26:15

标签: javascript jquery dialog confirm

这是我的jquery代码

$('.input').keyup(function(event){
    update_text(); // $('div').html('blahblah');
})
.blur(function(event){
    $(this).keyup();
    if(confirm('Are you sure?')){
        // do somthing...
    }
});

我的问题是输入模糊时,确认框应该在执行update_text();

后显示

但是update_text()似乎在确认后运行...

如何让它首先执行update_text(),然后显示确认对话框?

3 个答案:

答案 0 :(得分:0)

这可能太简单了,但它似乎解决了这个问题。

$('.input').keyup(function(event){
  update_text(); // $('div').html('blahblah');
})
$('.input').blur(function(event){
  update_text();
  if(confirm('Are you sure?')){
    // do somthing...
  }
});

答案 1 :(得分:0)

实际上你的方法确实在confirm()之前运行,这里的问题是你的浏览器异步重新绘制DOM,即使方法.html()本身是同步的。因此,虽然它看起来并不是第一次在视觉上运行,但确实如此。

例如,更简单的版本将具有相同的功能,这可能因浏览器而异:



$("div").html("foo");
confirm('Are you sure?');

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
&#13;
&#13;
&#13;

解决这个问题的一种方法是Jaromanda X's answer,而不是让浏览器执行此操作。例如:

&#13;
&#13;
$("div").html("foo");
$("div").hide().show(function(){
  confirm('Are you sure?'); 
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

update_text()发生在keyup事件上,该事件在输入模糊之前触发,因此如果设置正确,则每次用户输入另一个字符时实际发生。

&#13;
&#13;
$('.input').keyup(function(event){
    update_text(); // $('div').html('blahblah');
})
.blur(function(event){
    $(this).keyup();
    if(confirm('Are you sure?')){
        // do somthing...
    }
});

update_text = function() {
  text = $('.input').val();
  $('#text').text(text);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class='input'/>
<div id='text'>
&#13;
&#13;
&#13;