Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > код не работает в FF и Opera


Автор: DEER 8.9.2005, 10:37
Здравствуйте, помогие пож.
Код должен работать в IE и FF,
но работает почему то только в IE...

Должен создаваться object Box который создает новый DIV, и должен быть метод moveBox, который соотв его двигает по экрану.
Код

<html>
<body>
<table border="0">
<tr>
  <td align="center"><Input  type="button" value="create new div" onclick="create()"/></td><td align="center"></td><td align="center"><Input  type="button" value="move div" onclick="move()"/></td><td align="center"></td>
</tr>
<tr>
 <td align="center">Text in new div</td><td align="center"><Input type="text" id="tet"/></td>
</tr>
<tr>
 <td align="center">Width</td><td><Input type="text" id="width"/></td>
 <td align="center">Height</td><td><Input type="text" id="height"/></td>
</tr>
<tr>
 <td align="center">Left position</td><td><Input type="text" id="left"/></td>
 <td align="center">Top position</td><td><Input type="text" id="top"/></td>
</tr>
</table>

</body>

</html>

<script>
 var myBox;
 function create()
 {
   var oText = document.getElementById("tet");
   var owidth = document.getElementById("width");
   var oheight = document.getElementById("height");
   var oleft = document.getElementById("left");
   var otop = document.getElementById("top");

   myBox = new Box(oText.value, owidth.value, oheight.value, oleft.value, otop.value);
 }
 function move()
 {
   var oleft = document.getElementById("left");
   var otop = document.getElementById("top");

   myBox.moveBox(oleft.value, otop.value);
 }
 function Box(bodyText, width, height, left, top)
 {
   this.NewDiv = document.createElement("<div style='padding:5px;width:"+width+"px;height:"+height+"px;background-color:#eeeeee;position:absolute;left:"+left+"px;top:"+top+"px;'>");
   this.NewDiv.insertAdjacentText("afterBegin", bodyText);
   document.body.insertBefore(this.NewDiv);
   this.moveBox = moveBox;

 }
  function moveBox(left, top)
  {
   this.NewDiv.style.left = left+"px"; 
   this.NewDiv.style.top = top+"px"; 
  }
</script>


Исправте пожлст, кто сможет!

Автор: Sardar 8.9.2005, 12:47
Во первых код не работает даже в ИЕ.
Во вторых всегда выкладывай смысл кода(твою задачу), не всегда хочеться разбираться в лабуде 10 летней давности smile
В третьих времени ноль что бы писать тебе готовое решение, просто наведу на мысль:
  • document.createElement принимает только имя тега, ИЕ может принимать полную разметку, но это отхождение от W3C DOM 1 спецификации и по моему созданно как патчь к его кривым input:text name.
  • insertAdjacentText - функция появившаяся по моему за долго до W3C DOM, естественнно не поддерживаеться никем кроме ИЕ. Пользуйся (document.createTextNode, appendChild) или innerHTML.
В остальном должно работать.

Автор: DEER 8.9.2005, 13:06
Задачу я написал
Цитата
Должен создаваться object Box который создает новый DIV, и должен быть метод moveBox, который соотв его двигает по экрану


Цитата
document.createElement принимает только имя тега,

как должен создаваться DIV?
Код

this.NewDiv = document.createElement("div");

так?
Цитата

insertAdjacentText - функция появившаяся по моему за долго до W3C DOM, естественнно не поддерживаеться никем кроме ИЕ. Пользуйся (document.createTextNode, appendChild) или innerHTML.

просто не нашел в MSDN как по другому можно написать что нить в DIV.
попробовал добавить DIV так

Код

   this.oDiv=document.createElement("DIV");
   this.oDiv.appendChild("oDiv");
   document.body.appendChild(oDiv);

тоже ругаеться
не совсем что то разобрался
smile
Добавлено @ 13:11
Всё разобрался!
Спасибо

Автор: Sardar 8.9.2005, 15:35
Забей на MSDN, читай рекомендации W3C: http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-core.html

Цитата(DEER @ 8.9.2005, 12:06)
как должен создаваться DIV?

Да, var div=document.createElement('div');

Цитата(DEER @ 8.9.2005, 12:06)
просто не нашел в MSDN как по другому можно написать что нить в DIV.

Можно проще чере div.innerHTML - сразу вёрстку вставляешь. Можно через innerText/textContent - но может сглючить, лучше: div.appendChild(document.createTextNode('твой текст'));

Цитата(DEER @ 8.9.2005, 12:06)
Всё разобрался!
Спасибо

Всегда выкладывай решение, другим тоже интересно smile

Автор: DEER 9.9.2005, 08:40
Цитата

Можно проще чере div.innerHTML - сразу вёрстку вставляешь.

В задании было сказано, что надо это сделать без document.write и без innerText\innerHtml smile

Вот моё решение
Код

<html>
<body>
<table border="0">
<tr>
  <td align="center"><Input  type="button" value="create new div" onclick="create()"/></td><td align="center"></td><td align="center"><Input  type="button" value="move div" onclick="move()"/></td><td align="center"></td>
</tr>
<tr>
 <td align="center">Text in new div</td><td align="center"><Input type="text" id="tet"/></td>
</tr>
<tr>
 <td align="center">Width</td><td><Input type="text" id="width"/></td>
 <td align="center">Height</td><td><Input type="text" id="height"/></td>
</tr>
<tr>
 <td align="center">Left position</td><td><Input type="text" id="left"/></td>
 <td align="center">Top position</td><td><Input type="text" id="top"/></td>
</tr>
</table>

</body>

</html>

<script language="JavaScript">
 var myBox;
 function create()
 {
   var oText = document.getElementById("tet");
   var owidth = document.getElementById("width");
   var oheight = document.getElementById("height");
   var oleft = document.getElementById("left");
   var otop = document.getElementById("top");

   myBox = new Box(oText.value, owidth.value, oheight.value, oleft.value, otop.value);
 }
 function move()
 {
   var oleft = document.getElementById("left");
   var otop = document.getElementById("top");

   myBox.moveBox(oleft.value, otop.value);
 }
 function Box(bodyText, width, height, left, top)
 {
   this.NewDiv = document.createElement("div");
   document.body.appendChild(this.NewDiv);
   var oNode = document.createTextNode(bodyText);
   this.NewDiv.appendChild(oNode);
   this.NewDiv.style.padding = "5px";
   this.NewDiv.style.backgroundColor = "#eeeeee";
   this.NewDiv.style.position = "absolute";
   this.NewDiv.style.left = left+"px";
   this.NewDiv.style.top = top+"px";
   this.NewDiv.style.height = height+"px";
   this.NewDiv.style.width = width+"px";
   this.moveBox = moveBox;

 }
  function moveBox(left, top)
  {
   this.NewDiv.style.left = left+"px"; 
   this.NewDiv.style.top = top+"px"; 
  }
</script>


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)