如何使用JS获得NEWLY创建的选择宽度

时间:2017-07-13 09:19:54

标签: javascript php

我现在正把头靠在墙上3个小时。我有这段代码:

function showpctask() {
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    var xmlhttp = new XMLHttpRequest();
  } else {
    // code for IE6, IE5
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      document.getElementById("pcactivitytask").innerHTML = xmlhttp.responseText;
    }
  };

  xmlhttp.open("GET","showpctask.php"+,true);
  xmlhttp.send();
}

在div中打开一个php文件(id = pcactivitytask)。那个php文件构建了一个'select'

我也有这个功能:

function setpctaskwidth() {
  var maxtaskwidth = 0;
  $("div .pcactivitytask").each(function(){
    c_width = parseInt($(this).width());
    if (c_width > maxtaskwidth) {
      maxtaskwidth = c_width;
    }
  });

  alert (maxtaskwidth);
}

将显示具有“pcactivitytask”类的所有元素的最大宽度。是的,前一个脚本创建的选择具有该类。如果我同时调用这两个函数它将不包括新创建的选择的宽度.....我需要再次运行它'manuall'。我需要我的脚本“onclick”同时构建新的选择并包含它以通过第二个脚本找到最大宽度。谢谢。

1 个答案:

答案 0 :(得分:2)

XMLhttprequest异步工作,这意味着它不会按顺序发生。

这就是为什么你有xmlhttp.onreadystatechange回调函数,它只在请求完成后运行

您没有指定如何调用这两个函数,但我希望在setpctaskwidth()函数中看到对此onreadystatechange的调用,如下所示:

xmlhttp.onreadystatechange = function() {
   if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      document.getElementById("pcactivitytask").innerHTML =  xmlhttp.responseText;
      setpctaskwidth();
   }
 };

请注意,如果响应包含页面中尚不存在的图像或其他外部资源(字体等),则可能会获得与实际最终大小不同的大小(它将在加载图像之前测量大小) )