等待点击事件在Javascript中完成

时间:2012-12-25 03:41:52

标签: c# javascript jquery jquery-ui model-view-controller

我的图片中有onClick事件,导致新标签被添加到jQuery标签中。旁边的事件会将内容添加到此新标签页。

$('#Image').click();
$('#controladdedbyclickabove').append( message);

我看到的问题是click事件不会等待操作完成它将继续下一个语句。由于这个原因,我无法看到添加到点击产生的新控件的内容。如何使click事件在移动到下一个语句之前等待操作完成?

T必须依赖于触发点击,因为#image上的onClick操作具有我可以提取为字符串的所有参数,但我不确定如何执行它。

当onClick事件发生时,会调用此方法:

function addTab(title, uri, userid) {
    var newTab = $("#tabs").tabs("add", uri, title);
}

4 个答案:

答案 0 :(得分:3)

您不能等待事件被处理,因为在您退出函数并将控制权返回给浏览器之前不会处理它。

要在处理完事件后运行代码,您需要在退出函数后启动它:

$('#Image').click();
window.setTimeout(function(){
  $('#controladdedbyclickabove').append( message);
}, 0);

答案 1 :(得分:3)

你可以使用回调函数:

 if($('#Image')) {
  $('#Image').click(function() {
        $('#controladdedbyclickabove').append( message);
  });
}else {
  console.log('image object not there');
}

答案 2 :(得分:1)

有很多方法可以做到这一点。你想在点击完成后执行某些操作。

1:为什么不让你的代码像这样

function addTab(title, uri, userid) {
   var newTab = $("#tabs").tabs("add", uri, title);
   $('#controladdedbyclickabove').append( message);
}

2:你也可以像这样定义一个功能

function addTabCallback () {
  $('#controladdedbyclickabove').append( message);
}

function addTab(title, uri, userid) {
   var newTab = $("#tabs").tabs("add", uri, title);
   addTabCallback();
}

3:你可以使用观察者模式

function addTab(title, uri, userid) {
   var newTab = $("#tabs").tabs("add", uri, title);
   var observer = addTab.observers.shift();
   while (observer) {
      observer();
      observer = addTab.observers.shift();
   }
}
addTab.observers = [];
当你触发点击时,

应该做一点改变

addTab.observers.push(function () {
   // codes here will be executed when the click finished
   $('#controladdedbyclickabove').append( message);
});

$('#Image').click();

这是一个带有观察者模式的示例代码,对于实际,它应该做一些观察者类型检查等。^ _ ^。

答案 3 :(得分:0)

我最终将附加消息传递回ajax调用的服务器。因此,当单击事件调用时,控件在返回时会添加一条消息。我无法让javascript回调按预期工作。