Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.10.2013, 09:19
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

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 его не понимает? Подскажите решение проблемы...
Ответить с цитированием
  #2 (permalink)  
Старый 21.10.2013, 10:00
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Вообще не понял, при чем здесь 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>
Ответить с цитированием
  #3 (permalink)  
Старый 21.10.2013, 10:25
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

BETEPAH, а можно ссылку? У меня в голове не мамло информации скопилось за два года. Но разложить по полочкам всё никак....
Ответить с цитированием
  #4 (permalink)  
Старый 21.10.2013, 10:31
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

http://javascript.ru/basic/closure
Ответить с цитированием
  #5 (permalink)  
Старый 21.10.2013, 11:40
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

BETEPAH,
Не могли бы вы объяснить вот эту часть.
while(i<num){
    menuid.children[i].onclick=function (i) {
        return function() {
        tabs({"num": i, "id":"globaltext"})
        };
    }(i);
    i++}
Иначе медвежья услуга =)
Ответить с цитированием
  #6 (permalink)  
Старый 21.10.2013, 11:51
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

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

При клике i будет равно num-1.
Почитайте статью, а когда прочтете и останется что-то непонятное, обсудим
Ответить с цитированием
  #7 (permalink)  
Старый 21.10.2013, 12:11
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

BETEPAH,
окей, спасибо =)
Ответить с цитированием
  #8 (permalink)  
Старый 22.10.2013, 11:20
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

BETEPAH,
остался один вопрос. Почему var JSONOBJ комментарий?
Ответить с цитированием
  #9 (permalink)  
Старый 22.10.2013, 11:37
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от koeshiro
Почему var JSONOBJ комментарий?
Встречный вопрос, а зачем это нужно? Работает же? Можно удалять строку. Я оставил, чтоб вы видели, где изменение внесено
Ответить с цитированием
  #10 (permalink)  
Старый 22.10.2013, 17:18
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с JSON форматом :( vuler Общие вопросы Javascript 4 21.03.2012 23:22
Jquery, Dynatree и JSON antirek jQuery 6 01.09.2009 15:00
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36
Проблема с меню для кнопки в Гриде progi2007 ExtJS 0 03.08.2009 14:16