Javascript 如何使用JS获取新创建的选择宽度

Javascript 如何使用JS获取新创建的选择宽度,javascript,php,Javascript,Php,我现在正把头靠在墙上三个小时。我有以下代码: 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("Micros

我现在正把头靠在墙上三个小时。我有以下代码:

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(id=pcactivitytask)中打开一个php文件。该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”类中所有元素的最大宽度。是,由上一个脚本创建的选择具有该类。如果我同时调用这两个函数,它将不包括新创建的select…..的宽度。。。。。我需要再运行一次“手动”。我需要我的脚本“onclick”构建新的select,并在第二个脚本查找最大宽度时包含它。谢谢。

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

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

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

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

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

您的脚本调用
setpctaskwidth()
太早了,此时未加载
select.pcactivitytask
。这就是为什么它不包括其宽度,select不存在是的,您对php后端的调用是一个异步任务,所以您需要等待它完成。关于如何解决这个问题,可能有数不清的解释,因为这基本上是最主要的问题。但是很简单,在您的例子中,在
document.getElementById(“pcactivitytask”)行之后您需要以某种方式触发
setpctaskwidth
。谢谢您的好心先生!!!!谢谢,谢谢,谢谢!!!!!!!!!!!!!!!!!!!!!哈哈-我的荣幸:-)