Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Открытие ссылки в родительском окне 
:(
    Опции темы
Контур
Дата 16.11.2005, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



Ниже приведен скрипт, который создает древовидное меню. Вопрос:
1. Как сделать, чтобы ссылки открывались в родительском окне?
2. Как сделать, чтобы при наведении на все ссылки отображался hend?

Код

/**********************************
        Глобальные переменные
***********************************/
// предв. кеширование картинок
// (все картинки должны иметь одинаковые высоту и ширину)
var collapsedWidget = new Image(20, 16);
collapsedWidget.src = "var/oplus.gif";
var collapsedWidgetStart = new Image(20, 16);
collapsedWidgetStart.src = "var/oplusStart.gif";
var collapsedWidgetEnd = new Image(20, 16);
collapsedWidgetEnd.src = "var/oplusEnd.gif";
var expandedWidget = new Image(20, 16);
expandedWidget.src = "var/ominus.gif";
var expandedWidgetStart = new Image(20, 16);
expandedWidgetStart.src = "var/ominusStart.gif";
var expandedWidgetEnd = new Image(20, 16);
expandedWidgetEnd.src = "var/ominusEnd.gif";
var nodeWidget = new Image(20, 16);
nodeWidget.src = "var/onode.gif";
var nodeWidgetEnd = new Image(20, 16);
nodeWidgetEnd.src = "var/onodeEnd.gif";
var emptySpace = new Image(20, 16);
emptySpace.src = "var/oempty.gif";
var chainSpace = new Image(20, 16);
chainSpace.src = "var/ochain.gif";

// разные переменные
var widgetWidth = "20";
var widgetHeight = "16";
var currState = "";
var displayTarget = "Main";

/**********************************
           МЕНЮ
***********************************/
var expansionState = "";
// constructor for outline item objects
function outlineItem(text, uri) {
    this.text = text;
    this.uri = uri;
}
var olData = {childNodes:
             [{item:new outlineItem("Россия и СНГ"),
               childNodes:
                   [{item:new outlineItem("Оренбург", "http://aliance.hoha.ru/")},
                   {item:new outlineItem("Башкирия", "http://aliance.hoha.ru/")},
                   {item:new outlineItem("Челябинск", "http://aliance.hoha.ru/")},
                   {item:new outlineItem("Самара", "http://aliance.hoha.ru/")},
                   {item:new outlineItem("Москва, подмосковье", "http://aliance.hoha.ru/")},
                    {item:new outlineItem("Черноморское побережье Кавказа", "http://aliance.hoha.ru/"),
                     childNodes:
                         [{item:new outlineItem("Сочи", "http://aliance.hoha.ru/")},
                         {item:new outlineItem("Анапа", "http://aliance.hoha.ru/")},
                         {item:new outlineItem("Геленджик", "http://aliance.hoha.ru/")},
                         {item:new outlineItem("Туапсе", "http://aliance.hoha.ru/")},
                         {item:new outlineItem("Адлер", "http://aliance.hoha.ru/")}
                          ]},
                    {item:new outlineItem("Абхазия", "http://aliance.hoha.ru/")},
                    {item:new outlineItem("Кавказмкие минеральные воды", "http://aliance.hoha.ru/"),
                     childNodes:
                         [{item:new outlineItem("Кисловодск", "http://aliance.hoha.ru/")},
                         {item:new outlineItem("Пятигорск", "http://aliance.hoha.ru/")},
                         {item:new outlineItem("Есентуки", "http://aliance.hoha.ru/")},
                         {item:new outlineItem("Железноводск", "http://aliance.hoha.ru/")}
                          ]},
                    {item:new outlineItem("Крым", "http://aliance.hoha.ru/"),
                     childNodes:
                         [{item:new outlineItem("Южный берег", "http://aliance.hoha.ru/")},
                         {item:new outlineItem("Западный берег", "http://aliance.hoha.ru/")},
                         {item:new outlineItem("Восточный берег", "http://aliance.hoha.ru/")}
                          ]},
                    {item:new outlineItem("Трускавец", "http://aliance.hoha.ru/")},
                    {item:new outlineItem("Экскурсионные туры", "http://aliance.hoha.ru/")},
                    {item:new outlineItem("Речные круизы по Волге", "http://aliance.hoha.ru/")}
                    ]},
              {item:new outlineItem("Заграничные туры"),
               childNodes:
                   [{item:new outlineItem("Австралия", "http://aliance.hoha.ru/")},
                    {item:new outlineItem("Канада", "http://aliance.hoha.ru/")},
                    {item:new outlineItem(" и т.д. ", "http://aliance.hoha.ru/")}
                   ]}
                  ]
              };




/**********************************
Управление видимостью и картинками
***********************************/
function swapState(currState, currVal, n) {
    var newState = currState.substring(0,n);
    newState += currVal ^ 1 // Bitwise XOR item n;
    newState += currState.substring(n+1,currState.length);
    return newState;
}

function getExpandedWidgetState(imgURL) {
    if (imgURL.indexOf("Start") != -1) {
        return expandedWidgetStart.src;
    }
    if (imgURL.indexOf("End") != -1) {
        return expandedWidgetEnd.src;
    }
    return expandedWidget.src;
}

function getCollapsedWidgetState(imgURL) {
    if (imgURL.indexOf("Start") != -1) {
        return collapsedWidgetStart.src;
    }
    if (imgURL.indexOf("End") != -1) {
        return collapsedWidgetEnd.src;
    }
    return collapsedWidget.src;
}

function toggle(img, blockNum) {
    var newString = "";
    var expanded, n;
    expanded = currState.charAt(blockNum);
    currState = swapState(currState, expanded, blockNum);
    if (expanded == "0") {
        document.getElementById("OLBlock" + blockNum).style.display = "block";
        img.src = getExpandedWidgetState(img.src);
    } else {
        document.getElementById("OLBlock" + blockNum).style.display = "none";
        img.src = getCollapsedWidgetState(img.src);
    }
}

function expandAll() {
    var newState = "";
    while (newState.length < currState.length) {
        newState += "1";
    }
    currState = newState;
    initExpand();
}

function collapseAll() {
    var newState = "";
    while (newState.length < currState.length) {
        newState += "0";
    }
    currState = newState;
    initExpand();
}

/*********************************
   Генерация кода HTML
**********************************/
function calcBlockState(n) {
    var expandedData = (expansionState.length > 0) ? expansionState.split(",") : null;
    if (expandedData) {
        for (var j = 0; j < expandedData.length; j++) {
            if (n == expandedData[j] - 1) {
                return "1";
            }
        }
    }
    return "0";
}

var currID = 0;
var blockID = 0;

function drawOutline(ol, prefix) {
    var output = "";
    var nestCount, link, nestPrefix, lastInnerNode;
    prefix = (prefix) ? prefix : "";
    for (var i = 0; i < ol.childNodes.length ; i++) {
        nestCount = (ol.childNodes[i].childNodes) ? ol.childNodes[i].childNodes.length : 0;
        output += "<div class='OLRow' id='line" + currID++ + "'>\n";
        if (nestCount > 0) {
            output += prefix;
            output += "<img id='widget" + (currID-1) + "' src='" + ((i == ol.childNodes.length-1 && blockID != 0) ? collapsedWidgetEnd.src : (blockID == 0) ? collapsedWidgetStart.src : collapsedWidget.src);
            output += "' height=" + widgetHeight + " width=" + widgetWidth;
            output += " title='Click to expand/collapse nested items.' onClick='toggle(this," + blockID + ")'>&nbsp;";
            link =  (ol.childNodes[i].item.uri) ? ol.childNodes[i].item.uri : "";
            if (link) {
                output += "<a style='cursor: hand' href='" + link + "' class='itemTitle' title='" +
                link + "' target='" + displayTarget + "'>" ;
            } else {
                output += "<a style='cursor: hand' class='itemTitle' title='" + link + "'>";
            }
            output += "<span style='position:relative; top:-3px; height:11px'>" + ol.childNodes[i].item.text + "</span></a>";
            currState += calcBlockState(currID-1);
            output += "<span class='OLBlock' blocknum='" + blockID + "' id='OLBlock" + blockID++ + "'>";
            nestPrefix = prefix;
            nestPrefix += (i == ol.childNodes.length - 1) ?
                       "<img src='" + emptySpace.src + "' height=" + widgetHeight + " width=" + widgetWidth + ">" :
                       "<img src='" + chainSpace.src + "' height=" + widgetHeight + " width=" + widgetWidth + ">"
            output += drawOutline(ol.childNodes[i], nestPrefix);
            output += "</span></div>\n";
        } else {
            output += prefix;
            output += "<img id='widget" + (currID-1) + "' src='" + ((i == ol.childNodes.length - 1) ? nodeWidgetEnd.src : nodeWidget.src);
            output += "' height=" + widgetHeight + " width=" + widgetWidth + ">";
            link =  (ol.childNodes[i].item.uri) ? ol.childNodes[i].item.uri : "";
            if (link) {
                output += "&nbsp;<a href='" + link + "' class='itemTitle' title='" +
                link + "' target='" + displayTarget + "'>";
            } else {
                output += "&nbsp;<a style='cursor: hand' class='itemTitle' title='" + link + "'>";
            }
            output += "<span style='position:relative; top:-3px; height:11px'>" + ol.childNodes[i].item.text + "</span></a>";
            output += "</div>\n";
        }
    }
    return output;
}

/*********************************
     Инициализация
**********************************/
function initExpand() {
    for (var i = 0; i < currState.length; i++) {
        if (currState.charAt(i) == 1) {
            document.getElementById("OLBlock" + i).style.display = "block";
        } else {
            document.getElementById("OLBlock" + i).style.display = "none";
        }
    }
}

function initExpMenu(xFile) {
    // заворачиваем все меню в span
    var olHTML = "<span id='renderedOL'>" + drawOutline(olData) + "</span>";
    // закидываем код HTML в 'content' div для отображения
    document.getElementById("content").innerHTML = olHTML;
    initExpand();
}

PM MAIL   Вверх
kira
Дата 16.11.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 20.6.2005

Репутация: 1
Всего: 1



1. Как сделать, чтобы ссылки открывались в родительском окне?
строка 31:
Код

var displayTarget = "_self";


2. Как сделать, чтобы при наведении на все ссылки отображался hаnd?
строка 202:
Код

output += "&nbsp;<a style='cursor: hand;' href='" + link + "' class='itemTitle' title='" +

PM MAIL   Вверх
Sardar
Дата 16.11.2005, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



cursor: hand не существует, это фича ИЕ, которая например в мозилле не будет работать. Правильный стиль cursor: pointer который везде будет работать как нужно.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Контур
Дата 16.11.2005, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



Спасибо за ответы. Буду внедрять. =)
PM MAIL   Вверх
DemoCode
Дата 16.11.2005, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 3
Всего: 41



Цитата(Sardar @ 16.11.2005, 15:30)
Правильный стиль cursor: pointer который везде будет работать как нужно.


Тоже кстати не везде. Я сам видел. Причём не работал в IE (5 с чем-то под Win2000 SP какой-то). С тех пор я делаю так:
<a href="Какой-то текст" onClick="return false;">Тут точно будет hand</a>
На случай отключенного JavaScript, ничего не остается как <noscript>и тут уж с курсор: поинтер</noscript>


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Aliance
Дата 17.11.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Мог бы и автору сайта, где был скрипт задать этот вопрос… тоесть мне smile
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0820 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.