innerHTML в IE? - PullRequest
       36

innerHTML в IE?

0 голосов
/ 21 февраля 2010

У меня проблемы с использованием innerHTML с моей кнопкой типа радио.

<table align="center">
 <div class='main'>
  <span id="js" class='info'>
   <label><input type="radio" name="js" value="0" size="<?php echo $row['size']; ?>" onclick="js(this.value, this.size);" /><img src="arrowup.png"/></label>
   <br />
   <label><input type="radio" name="js" value="1" size="<?php echo $row['size']; ?>" onclick="js(this.value, this.size);" /><img src="arrowdown.png"/></label>
  </span>
 </div>
</table>

Мой .js выглядит так:

var xmlhttp;

function getVote(a,b) {
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)   {
  alert ("Browser does not support HTTP Request");
  return;
  }
var url="js.php";
url=url+"?js="+a;
url=url+"&id="+b;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged() {

  if (xmlhttp.readyState==4) {
  document.getElementById("js").innerHTML=xmlhttp.responseText;
  }
}

function GetXmlHttpObject() {
var objXMLHttp=null;
if (window.XMLHttpRequest)   {
  objXMLHttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)   {
  objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
return objXMLHttp;
} 

Это не работает только в IE! Любая помощь?

Ответы [ 3 ]

2 голосов
/ 04 апреля 2010

во-первых, почти уверен, что DIV непосредственно внутри TABLE является недопустимой разметкой.

не используйте незаконную разметку. браузеры будут по-разному реагировать на это (у меня недавно Opera игнорировала некоторые нелегальные вещи, когда IE пытался их отобразить).

хотя IE обычно этого заслуживает, сначала верните правильную разметку, а затем посмотрите, как это делает IE. возможно, он не смог отобразить DOM так, как вы ожидаете.

(FWIW есть проблема с рендерингом innerHTML, с которой я столкнулся в IE, http://support.microsoft.com/kb/276228/,, но для элемента SELECT, поэтому я не думаю, что он применим здесь)

1 голос
/ 21 февраля 2010

Проблема действительно заключалась во внутреннем HTML для тега таблицы. IE не поддерживает innerHTML, обернутый вокруг тега таблицы, и не намерен решать эту проблему в своих будущих выпусках.

Обходной путь - использовать методы DOM или самый простой способ: обернуть таблицу вокруг div.

Итак, я закончил с:

<div id="js" align="center"><table>
        <span class='main'>
            <a onClick="getVote(this.value, this.size);" type="radio" value="0" size="<?php echo $row['id']; ?>" /><img src="arrowup.png"/></a>
            <br /><a onClick="getVote(this.value, this.size);" type="radio" value="1" size="<?php echo $row['id']; ?>" /><img src="arrowdown.png"/></a>
            </span>
</table></div>

Есть еще одна ошибка IE, которая портит метку, если она установлена ​​в качестве изображения. Просто на голову! Я знаю, вы не удивитесь, когда я скажу, что IE отстой!

0 голосов
/ 13 декабря 2011

Я знаю, что это немного поздно, но вот как исправить эту проблему с помощью jQuery:

$("#tableName").html(DataToWrite);
...