Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 聆听外部应用程序使用jQuery对元素所做的样式更改_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 聆听外部应用程序使用jQuery对元素所做的样式更改

Javascript 聆听外部应用程序使用jQuery对元素所做的样式更改,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我的网页中有一个表单,它将信息提交给外部应用程序,并根据响应将元素的样式从“显示:无”更改为“显示:块” 我希望在做出更改后能够运行一个函数,因为这表明操作成功 你会怎么做这样的事?这里有一个快速而肮脏的方法: var onElementStyleChange = (function() { var elements = [], started = false; return function(element, callback) { elements.unshift

我的网页中有一个表单,它将信息提交给外部应用程序,并根据响应将元素的样式从“显示:无”更改为“显示:块”

我希望在做出更改后能够运行一个函数,因为这表明操作成功


你会怎么做这样的事?

这里有一个快速而肮脏的方法:

var onElementStyleChange = (function() {
  var elements = [],
      started = false;
  return function(element, callback) {
    elements.unshift({element: element, callback: callback});
    if (!started) {
      window.setTimeout(function checkElements() {
        for (var i = elements.length - 1; i >= 0; i--) {
          var element = elements[i].element,
              callback = elements[i].callback;
          if (element.style.display === 'block') {
            callback();
            elements.splice(i,1);
          }
        }
        if (elements.length) {
          window.setTimeout(checkElements, 0);
        } else {
          started = false;
        }
      },0);
      started = true;
    }      
  }
}());
然后您可以将其称为do have it check your element:

onElementStyleChange(element, function() {
  //do stuff..
});
说明:
onElementStyleChange
反复检查元素,直到元素的
display
style属性为
block
时才停止检查。一旦它看到您的元素具有
display:block
,它将调用您传递给它的任何函数并停止检查


编辑:进行更新,使任意数量的元素都可以使用此功能。

如果您有250个元素要查看,该怎么办?您将设置250个设置超时?@XGreen它既快又脏,但是,再次强调,观察
style
属性来触发函数也不是一种很好的方法。它不是内存密集型的。你的方法没有得到任何优化。当你完成时,你甚至没有清除超时。正如我在现实世界中提到的,他们最终只会吃备忘录。