Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   eval + JSON проблема для начинающего. . . (https://javascript.ru/forum/misc/42296-eval-json-problema-dlya-nachinayushhego.html)

koeshiro 21.10.2013 09:19

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 его не понимает? Подскажите решение проблемы...

BETEPAH 21.10.2013 10:00

Вообще не понял, при чем здесь 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>

koeshiro 21.10.2013 10:25

BETEPAH, а можно ссылку? У меня в голове не мамло информации скопилось за два года. Но разложить по полочкам всё никак....

BETEPAH 21.10.2013 10:31

http://javascript.ru/basic/closure

koeshiro 21.10.2013 11:40

BETEPAH,
Не могли бы вы объяснить вот эту часть.
while(i<num){
    menuid.children[i].onclick=function (i) {
        return function() {
        tabs({"num": i, "id":"globaltext"})
        };
    }(i);
    i++}
Иначе медвежья услуга =)

BETEPAH 21.10.2013 11:51

Цитата:

Сообщение от koeshiro
медвежья услуга

вот мне и благодарность! :)
Именно эта часть и станет понятной, когда почитаете про замыкания.
У вас в этой части код не рабочий.
while(i<num){menuid.children[i].onclick=function () {tabs('"num":"'+i+'"; "id":"globaltext"')};i++}

При клике i будет равно num-1.
Почитайте статью, а когда прочтете и останется что-то непонятное, обсудим

koeshiro 21.10.2013 12:11

BETEPAH,
окей, спасибо =)

koeshiro 22.10.2013 11:20

BETEPAH,
остался один вопрос. Почему var JSONOBJ комментарий?

BETEPAH 22.10.2013 11:37

Цитата:

Сообщение от koeshiro
Почему var JSONOBJ комментарий?

Встречный вопрос, а зачем это нужно? Работает же? Можно удалять строку. Я оставил, чтоб вы видели, где изменение внесено

koeshiro 22.10.2013 17:18

Цитата:

Сообщение от BETEPAH (Сообщение 277594)
Встречный вопрос, а зачем это нужно? Работает же? Можно удалять строку. Я оставил, чтоб вы видели, где изменение внесено

Хотите сказать что подобное преобразование не нужно затем что не обязательно делать строку а можно сразу просто отправить объект?


Часовой пояс GMT +3, время: 10:22.