【问题标题】:Firefox 3.6.18 and IE Javascript insert rows into a tableFirefox 3.6.18 和 IE Javascript 将行插入表中
【发布时间】:2011-06-23 09:33:40
【问题描述】:

我创建了一个将一些行插入到表中的脚本。脚本如下所示:

 for (j = 0; j < <?php echo $i; ?>; j++)
    {
        if ((utilizator[j]['nume'].toLowerCase().indexOf(nume.toLowerCase()) != -1) && (utilizator[j]['locatie'].toLowerCase().indexOf(locatie.toLowerCase()) != -1) && (utilizator[j]['varsta'].toLowerCase().indexOf(varsta.toLowerCase()) != -1) && (utilizator[j]['email'].toLowerCase().indexOf(email.toLowerCase()) != -1) && (utilizator[j]['telefon'].toLowerCase().indexOf(telefon.toLowerCase()) != -1))
        {
            var insertString = '<td>'+utilizator[j]['nume']+'</td>';
            insertString += '<td>'+utilizator[j]['locatie']+'</td>';
            insertString += '<td>'+utilizator[j]['varsta']+'</td>';
            insertString += '<td>'+utilizator[j]['email']+'</td>';
            insertString += '<td>'+utilizator[j]['telefon']+'</td>';
            insertString += '<td>'+utilizator[j]['punctaj']+'</td>';
            if (utilizator[j]['suspendat'] != 1)
            {
                insertString += '<td id="suspendareButon'+utilizator[j]['id']+'"><input type="button" value="Suspenda" onclick="suspendare(1, '+utilizator[j]['id']+')" /></td>';
            }
            else
            {
                insertString += '<td id="suspendareButon'+utilizator[j]['id']+'"><input type="button" value="Activeaza" onclick="suspendare(0, '+utilizator[j]['id']+')" /></td>';
            }
            var trTag = document.createElement("tr");
            trTag.innerHTML = insertString;
            document.getElementById("utilizatoriId").appendChild(trTag);
        }
    }

脚本在 Firefox 4.0+ 中运行良好(所以我没有发现问题),但我的一位同事使用的是 Firefox 3.6.18,似乎 td 标记已被剥离。我得到类似&lt;tr&gt;data data data data...&lt;/tr&gt; 而不是&lt;tr&gt;&lt;/td&gt;data&lt;/td&gt;&lt;td&gt;data&lt;/td&gt;...&lt;/tr&gt;

任何想法为什么会发生这种情况?

在 IE 中我也得到一个错误并且什么都没有显示(错误是“对象不显示这个属性或方法”,我不能准确地指出这一行,因为 IE 不善于报告......)

【问题讨论】:

  • 为什么不始终如一地使用 DOM?
  • 是的...修复了 ff 部分。 IE 仍然死掉。

标签: javascript firefox html-table cross-browser


【解决方案1】:

你可以试试这个吗?

您不应该将Child 附加到表格,而应该附加到 tBody,但假设我的所有语法都正确,这将附加到表格本身

  var util, trTag, tdTag, input, suspend, max = <?php echo $i; ?>;
  for (var j = 0; j < max; j++) {
    util = utilizator[j];
    if ((util['nume'].toLowerCase().indexOf(nume.toLowerCase()) != -1) &&
        (util['locatie'].toLowerCase().indexOf(locatie.toLowerCase()) != -1) && 
        (util['varsta'].toLowerCase().indexOf(varsta.toLowerCase()) != -1) && 
        (util['email'].toLowerCase().indexOf(email.toLowerCase()) != -1) && 
        (util['telefon'].toLowerCase().indexOf(telefon.toLowerCase()) != -1)) {
      trTag = document.getElementById("utilizatoriId").insertRow(-1);
      tdTag = trTag.insertCell(-1);
      tdTag.appendChild(document.createtextNode(util['nume']));
      tdTag = trTag.insertCell(-1);
      tdTag.appendChild(document.createtextNode(util['locatie']));
      tdTag = trTag.insertCell(-1);
      tdTag.appendChild(document.createtextNode(util['varsta']));
      tdTag = trTag.insertCell(-1);
      tdTag.appendChild(document.createtextNode(util['email']));
      tdTag = trTag.insertCell(-1);
      tdTag.appendChild(document.createtextNode(util['telefon']));
      tdTag = trTag.insertCell(-1);
      tdTag.appendChild(document.createtextNode(util['punctaj']));
      input = document.createElement("input");
      suspend = (util['suspendat'] != 1);
      input.type="button";
      input.id = "suspendareButon'+util['id'];
      input.value = (suspend)?"Suspenda":"Activeaza";
      input.onclick=function() {
        var suspend = this.value==="Suspenda"?1:0;
        var id = this.id.replace("suspendareButon","");
        suspendare(suspend,id);
      }  
    }
  }

【讨论】:

  • 我 2 小时前离开了我的办公室,但我会在早上的第一件事就是尝试它,看看它是否按预期工作(它看起来很好 2 我)。一个小问题......为什么我不能将一个孩子附加到一张桌子上? (我当然会自己做一些研究,但是当我阅读你的帖子时,我一直想知道为什么)。
  • 因为有些浏览器希望你附加到一个 tBody 上,如果没有,它们会静默插入
  • 是的,但“utilizatoriId”是一个 tBody 而不是一个表(我想我忘了提)。女巫我专门用来避免浏览器的混淆......表ID是“utilizatoriTableId”,里面有2个tBody,其中一个叫做utilizatoriId。
  • 是的,你忘了说 :) 在任何情况下都要保持一致并注意更简单的 onclick 函数
  • 确保文档类型正确。如果您需要,请通过 plungjan.name 与我联系,并将包含视图源的 zip 发送给我,以便我可以在 IE8(在 IE7 模式下)进行测试
【解决方案2】:

【讨论】:

  • 还有很多 SO 条目,但是这个值得更多关注,因为有很多地方需要改进
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多