eval + JSON проблема для начинающего. . .
Проблема такова: Есть вот такой код
<!DOCTYPE html> <html> <head> <title></title> <meta name="" content=""> <style> body{margin:0; padding:0; background:url(file:///C:/Users/Rail-gun/Desktop/ravens.gif);} .tubs{border-radius:0px 0px 15px 15px; border: solid 2px #c4c6c1; background:#cfd1cd; padding-top:5px; padding-left:5px; padding-bottom:5px; padding-right:5px; margin-left:20px;width:auto; height:auto; float: left; box-shadow: 3px 3px rgba(0, 0, 0, 0.6);z-index:99;} .textbody{display:none; background: #d7d9d5; border: solid 2px #c4c6c1; margin-top:1%;box-shadow: 3px 3px rgba(0, 0, 0, 0.7); white-space:pre-wrap;overflow: auto; top:0; left:0;} </style> </head> <body> <div align='center'> <div id='globaltext' align="center" > <div class="textbody" ></div> <div class="textbody" ></div> <div class="textbody" ></div> <div class="textbody" ></div> <div class="textbody" ></div></div> <div id="menu" align="center"> <div class="tubs"><a href="#6">Главная</a></div> <div class="tubs">Информация</div> <div class="tubs">О Продукции</div> <div class="tubs">Адреса</div> <div class="tubs">Контакты</div> </div></div> <script> function firstfun(){ var menuid=document.getElementById('menu'); var num=menuid.children.length; var i=0; while(i<num){menuid.children[i].onclick=function () {tabs('"num":"'+i+'"; "id":"globaltext"')};i++} } function tabs(obj){ var JSONstring='{'+obj+'}'; var JSONOBJ=eval( " ( " + obj + " ) " ); var bodyid=document.getElementById(id); var num=bodyid.children.length; var i=0; while(i<num){bodyid.children[i].style.display="none";i++} bodyid.children[funobj.num].style.display="block"; bodyid.children[element].style.height=screen.height-((screen.height/100)*3)-155+'px'; bodyid.children[element].style.width=screen.width-35+'px'; } function seturl(){ var a=document.getElementsByTagName("a"); var num=a.length; var i=0; while(i<num){var ahref=a[i].href; a[i].onclick=function(){openframe(ahref)}; a[i].removeAttribute('href');i++;} } function openframe(ahref){ alert(ahref); } firstfun(); seturl(); </script> </body> </html>Всего лишь табы для меню + функция которая будет открывать все ссылки в iframe. Проблема заключается в табах. Как только я решил избавиться от setAttribute в угоду старым IE и моему учителю начались проблемы. При вызове функции начали теряться номера нужных блоков для текста. . . Я подумал решить эту проблемы давно известной мне БД JSON(Известна мне она известна, но использую её в первый раз). Как бы eval использовал по инструкции. Но пишет что не хватает ')' . . . Пробовал JSON.parse но толку если старый дряхлый ie его не понимает? Подскажите решение проблемы... |
Вообще не понял, при чем здесь eval, json и setAttribute. Вам бы по замыканиям повторить материал
<!DOCTYPE html> <html> <head> <title></title> <meta name="" content=""> <style> body{margin:0; padding:0; background:url(file:///C:/Users/Rail-gun/Desktop/ravens.gif);} .tubs{border-radius:0px 0px 15px 15px; border: solid 2px #c4c6c1; background:#cfd1cd; padding-top:5px; padding-left:5px; padding-bottom:5px; padding-right:5px; margin-left:20px;width:auto; height:auto; float: left; box-shadow: 3px 3px rgba(0, 0, 0, 0.6);z-index:99;} .textbody{display:none; background: #d7d9d5; border: solid 2px #c4c6c1; margin-top:1%;box-shadow: 3px 3px rgba(0, 0, 0, 0.7); white-space:pre-wrap;overflow: auto; top:0; left:0;} </style> </head> <body> <div align='center'> <div id='globaltext' align="center" > <div class="textbody" >тест главной</div> <div class="textbody" >текст информации</div> <div class="textbody" >текст о продукции</div> <div class="textbody" >текст адреса</div> <div class="textbody" >текст контакты</div></div> <div id="menu" align="center"> <div class="tubs"><a href="#6">Главная</a></div> <div class="tubs">Информация</div> <div class="tubs">О Продукции</div> <div class="tubs">Адреса</div> <div class="tubs">Контакты</div> </div></div> <script> function firstfun(){ var menuid=document.getElementById('menu'); var num=menuid.children.length; var i=0; while(i<num){ menuid.children[i].onclick=function (i) { return function() { tabs({"num": i, "id":"globaltext"}) }; }(i); i++ } } function tabs(obj){ //var JSONstring='{'+obj+'}'; //var JSONOBJ=eval( " ( " + obj + " ) " ); var bodyid=document.getElementById(obj.id); var num=bodyid.children.length; var i=0; while(i<num){bodyid.children[i].style.display="none";i++} bodyid.children[obj.num].style.display="block"; bodyid.children[element].style.height=screen.height-((screen.height/100)*3)-155+'px'; bodyid.children[element].style.width=screen.width-35+'px'; } function seturl(){ var a=document.getElementsByTagName("a"); var num=a.length; var i=0; while(i<num){var ahref=a[i].href; a[i].onclick=function(){openframe(ahref)}; a[i].removeAttribute('href');i++;} } function openframe(ahref){ } firstfun(); seturl(); </script> </body> </html> |
BETEPAH, а можно ссылку? У меня в голове не мамло информации скопилось за два года. Но разложить по полочкам всё никак....
|
|
BETEPAH,
Не могли бы вы объяснить вот эту часть. while(i<num){ menuid.children[i].onclick=function (i) { return function() { tabs({"num": i, "id":"globaltext"}) }; }(i); i++}Иначе медвежья услуга =) |
Цитата:
Именно эта часть и станет понятной, когда почитаете про замыкания. У вас в этой части код не рабочий. while(i<num){menuid.children[i].onclick=function () {tabs('"num":"'+i+'"; "id":"globaltext"')};i++} При клике i будет равно num-1. Почитайте статью, а когда прочтете и останется что-то непонятное, обсудим |
BETEPAH,
окей, спасибо =) |
BETEPAH,
остался один вопрос. Почему var JSONOBJ комментарий? |
Цитата:
|
Цитата:
|
Цитата:
|
Просто всегда казалось что передавать можно только строки.
|
Часовой пояс GMT +3, время: 17:55. |