Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Javascript: как выбрать изображения по определенному признаку и вытянуть путь

40K
16 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Добрый день. Задача такая
Имеются картинки в HTML с параметром rel="lytebox"
Нужно сделать так, чтобы если такой параметр на странице имеется - вызвать функцию ShowPR и подать в нее адрес изображения.
Если можно, по-подробнее, в Javascript я ноль!
40K
17 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Возможно не понятен мой вопрос? тогда подробнее:
есть картинки на странице, некоторые из них имеют rel="lytebox", например:
 
Код:
<img src="images/1.gif" rel="lytebox"/>

необходимо найти эти картинки и сделать так чтобы при клике на них вызывалась функция ShowPR(images/1.gif) и ей передавался путь к изображению в качестве фактического параметра.
563
17 июля 2009 года
MrLinker
249 / / 17.09.2006
Во, спасибо за разъяснения...
Цитата:
Имеются картинки в HTML с параметром rel="lytebox"


Вот это круто!
И что в теге IMG делает атрибут rel?
Ну да ладно...
Вот решение:

Код:
function SetAllImgEvents()
{
    var imgs = document.getElementsByTagName('IMG');
    var l = imgs.length;
    for(var i = 0; i<l; i++)
    {
        if("lytebox" == imgs.getAttribute('rel'))
        {
            imgs.onclick = function() {EventHandler(this.src);}
        }
    }
}

function EventHandler(txt)
{
    alert(txt + ' get your fucking camera out of my face you dumbfuck!');
}

[HTML]<body>
<img src="images/1.gif" alt="image1"/>
<img src="images/2.gif" alt="image2"/>
<img src="images/3.gif" alt="image3" rel="lytebox"/>
<img src="images/4.gif" alt="image4" />
<img src="images/5.gif" alt="image5" rel="lytebox"/>
<img src="images/6.gif" alt="image6" rel="lytebox"/>
<img src="images/7.gif" alt="image7"/>

<script type="text/javascript">
SetAllImgEvents();
</script>
</body>[/HTML]
40K
17 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Спасибо Вам большое за помошь, буду разбираться
12
20 июля 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: mafiozzzza
Возможно не понятен мой вопрос?


Поняли то возможно многие, но в контексте "в Javascript я ноль" который чаще всего стоит понимать как "сделайте за меня" желание помочь сильно уменьшается...

40K
21 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Ну я собственно это не имел ввиду, мне бы хватило просто названия функций для выборки элементов. Спасибо большое MrLinker который все расписал подробнейшим образом.
У меня еще один маленький вопросик. MrLinker оказался прав и параметр rel я действительно использовал не в изображении а в ссылке, в связи с этим изменил код.
Цитата:
function SetAllImgEvents()
{
var imgs = document.getElementsByTagName('A');
var l = imgs.length;
for(var i = 0; i<l; i++)
{
if("lytebox" == imgs.getAttribute('rel'))
{
imgs.onclick = function() {showPr(this.href);}
}
}
}


и появилась проблемка. Дело в том что при нажатии на ссылку открывается не только дополнительное окно с изображением, вызванное функцией showPr но и основное окно переходит по ссылке.
Как отменить переход по ссылке основного окна.
Пробовал изменять параметр href, но ничего хорошего из этого не вышло, потому что onclick берет ссылку тоже из href.(ИМХО)

40K
21 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Мужики, отбой тревоги. разобрался сам.
Если кому интересно, я заменил строку
Цитата:
imgs.onclick = function() {showPr(this.href);}


на строку

Цитата:
imgs.href = "java script:showPr('"+imgs.href+"')";


и добился желаемого результата. Все же приятно когда сам. Эх))

40K
21 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Ужос, в firefoxe все отлично, а explorer пишет что ошибка на странице. ЧТо делать?? Где ошибка.
На всякий случай привожу полный код скрипта
Цитата:
<script language="JavaScript">
var imageWindow;
function SetAllImgEvents()
{
var imgs = document.getElementsByTagName('A');
var l = imgs.length;
for(var i = 0; i<l; i++)
{
if("lytebox" == imgs.getAttribute('rel'))
{
imgs.href = "java script:showPr('"+imgs.href+"')";
}
}
}
function setWH()

{
var paramWnd="copyhistory=no,directories=yes,width=640,height=340,menubar=no,resizable=yes,status=yes,tollbar=no,scrollbars=yes" ;
return(paramWnd);
}



function showPr(ndx) {
if (imageWindow!=null) {
if (imageWindow.closed==false) imageWindow.close();
}
var tmp;
tmp=setWH();
var imagepath=ndx;
imageWindow=window.open(imagepath,ndx,tmp);

}



</script>

563
22 июля 2009 года
MrLinker
249 / / 17.09.2006
Цитата:
imgs.href = "java script:showPr('"+imgs.href+"')";


Это плохо.
Хотя бы потому, что пользователи с отключенным javascript обламываются.
Лучше оставить вариант с onclick и добавить "return false;".

12
22 июля 2009 года
alekciy
3.0K / / 13.12.2005
Ставь alert с любым тестом последовательно после каждой строки вызываемого кода и обновляй страницу. После какой строки alert перестанет срабатывать там и ошибка.

Т.е. меняем код:
Код:
function SetAllImgEvents()
{
alert('test');
var imgs = document.getElementsByTagName('A');
var l = imgs.length;
for(var i = 0; i<l; i++)
{
if("lytebox" == imgs.getAttribute('rel'))
{
imgs.href = "java script:showPr('"+imgs.href+"')";
}
}
}

если видим после обновления страницы окно с надписью test, значит функция вызывается. Переставляем алерт ниже:
Код:
function SetAllImgEvents()
{
var imgs = document.getElementsByTagName('A');
alert('test');
var l = imgs.length;
for(var i = 0; i<l; i++)
{
if("lytebox" == imgs.getAttribute('rel'))
{
imgs.href = "java script:showPr('"+imgs.href+"')";
}
}
}

сохраняем, обновляем. Если опять видим окно, значит var imgs = document.getElementsByTagName('A') отработал как нужно.

В общем так для всей цепочки строк делаем, если алерт где-то не вылезет, значит ошибка в строке над алертом.

Метод тупой брудфост отладки, но это же ослик, что делать...
40K
22 июля 2009 года
mafiozzzza
34 / / 16.07.2009
MrLinkerПростите, а вы не могли бы написать строку с "return false;" я уже и сам это нашел, но записать правильно не могу.
Пробовал так: imgs.onClick = "showPr(this.href);return false";
Но вы мне в коде писали еще и function() - но зачем это я не понимаю.
12
22 июля 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: MrLinker
Это плохо.
Лучше оставить вариант с onclick и добавить "return false;".


Полностью поддерживаю.

Стартопику читать тут: Почему <a href="java script:..."> - плохо.

40K
22 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Проверил алертом, он везде работает, даже в IF. Пробовал подставлять вместо своей функции showPr - alert, все работает и выводится ссылка к изображению. Выходит проблема в функции showPr, тоесть либо в ней что-то не так, либо IE не может к ней добраться.
12
22 июля 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: mafiozzzza
Проверил алертом, он везде работает


Если IE пишет, что где-то ошибка, значит где-то ошибка. Не обязательно в этих функциях, но обязательно в скриптах запущенных на странице. Так, что алерт срабатывает везде, а браузер пишет об ошибке не бывает.

40K
22 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Я тоже с вами согласен, но я не знаю как правильно записать вот эту строку
Цитата:
imgs.onClick = "showPr('"+this.href+"');return false";


До меня дошло что this.href это переменная)
Прочитал статью, вроде бы запись такая же, может вы знаете что не так?

40K
22 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Я имел ввиду что alert срабатывает везде в функции SetAllImgEvents().
Провери функции showPr и setWH - там он не работает.
Так как setWH вызывается только функцией showPr то думаю проблема в ней.
Но какая - понятия не имею. Я ее даже не писал. Сейчас попробую разобраться.
12
22 июля 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: mafiozzzza
Я тоже с вами согласен, но я не знаю как правильно записать вот эту строку

До меня дошло что this.href это переменная)
Прочитал статью, вроде бы запись такая же, может вы знаете что не так?


this это вообще-то ссылка на текущий объект в текущем контексте. А там бывает все ох как неоднозначно порой, ибо контексте не всегда очевиден, так что лучше избегай его использования.

href это свойство объекта, а onclick, по хорошему, это метод. А вещать на него нужно обработчик, а обработчики обычно не так вещаются, хотя и такая форма на сколько я помню прокатывает. Т.е. в данном случае мне видится, что проблема в this.

40K
22 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Забыл отписать, но это я тоже проверил, подставил на место this абсолютную ссылку на картинку, ничего не сработало все равно и окно не появилось
40K
22 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Вопрос так и не решился!! Может хоть кто нибудь знает как сделать так, чтобы при нажатии на ссылку в новом окне открывалось изображение в Internet Explorer. Я даже браузер себе до 8 обновил - не помогло. Я вообще впервые столкнулся с этим.
Испробовал новую функцию, в ней в firefox все отлично, а в Explorer картинки открываются в новой вкладке.
Вот код:
Цитата:
function SetAllImgEvents()
{
var imgs = document.getElementsByTagName('A');
var l = imgs.length;
for(var i = 0; i<l; i++)
{
if("lytebox" == imgs.getAttribute('rel'))
{
imgs.href="java script:popup_img('"+imgs.href+"')";
}
}
}
function popup_img(filename)
{
var newImage = new Image();
newImage.src = filename;
newWin = window.open(filename,'pin_convert',
"copyhistory=no,directories=yes,width=640,height=340,menubar=no,resizable=yes,status=yes,tollbar=no,scrollbars=yes");
}

563
22 июля 2009 года
MrLinker
249 / / 17.09.2006
Говорю же, оставьте вариант с onclick:
Цитата:
imgs.onclick = function() {showPr(this.href); return false;}


Только, как правильно заметил alekciy, указываем как метод, а не строку.
Вообще, если бы не IE, то можно было бы задавать события строкой через SetAttribute.

40K
22 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Спасибо вам за правильное написание, я бы сам не сообразил. Сделал так, но все равно в IE не работает. Проблема в этой строке:
Цитата:
imageWindow=window.open(ndx,ndx,paramWnd);


так как alert до нее работает, а после уже нет. Это из функции showPr:

Цитата:
function showPr(ndx) {
if (imageWindow!=null) {
if (imageWindow.closed==false) imageWindow.close();
}
paramWnd="copyhistory=no,directories=yes,width=640,height=340,menubar=no,resizable=yes,status=yes,tollbar=no,scrollbars=yes" ;
alert('test');
imageWindow=window.open(ndx,ndx,paramWnd);
}

12
22 июля 2009 года
alekciy
3.0K / / 13.12.2005
Сделай алерты для ndx, ndx и paramWnd и убедись, что в ndx содержиться адрес, который нужно открыть, в ndx записано new. А из paramWnd попробуй удалить все, кроме размеров окна.

Ибо вот тут: http://ww-realty.ru/catalogue/dom/rumjanzevo-id253-101.html при клике по "Посмотреть местоположение на карте" все работает даже в IE.
312
22 июля 2009 года
dead_star
392 / / 26.11.2006
подозреваю что причина в том что в качестве имени окна ты передаешь url
и в свойствах вместо toolbar пиши tollbar
попробуй так
 
Код:
function showPr(ndx) {
if (imageWindow!=null) {
if (imageWindow.closed==false) imageWindow.close();
}
paramWnd="directories=yes,width=640 ,height=340,menubar=no,resizable=yes,status=yes,toolbar=no,scrollbars=yes" ;
alert('test1');
imageWindow=window.open(ndx,'newWin',paramWnd);
alert('test2');
}
40K
22 июля 2009 года
mafiozzzza
34 / / 16.07.2009
Цитата:
убедись, что в ndx содержиться адрес, который нужно открыть, в ndx записано new.

Не понял я что-то вас, почему в ndx должно быть разное, если это одна переменная.
1. Ну в общем alertom я проверил, в ndx действительно содержится путь к картинке. Если бы он там не содержался то и Firefox ничего окрыть бы не смог.
2. paramWnd - вообще необязательный парамет, так что пробовал без него, пробовал удалить все кроме размеров экрана -для firefox вообще ничего не изменилось, а Explorer просто открывает новую вкладку.
3. По-поводу tool и toll - пробовал и так , и сяк и вообще без него, безрезультатно.
Может будут еще варианты, или может у кого нибудь есть успешный опыт использования функции window.open в IE?

312
22 июля 2009 года
dead_star
392 / / 26.11.2006
вообще, похоже, это приблуда IE
он всегда открывает всплывающие окна в новой вкладке
проверил на своем старом коде, который хорошо работал, результат отрицательный
проверил ссылку которую давал alekciy
на их сайте, в IE, окна тоже открывает в новой вкладке
так что могу предложить решение
делай на слоях как это сейчас делают все
12
22 июля 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: mafiozzzza
Не понял я что-то вас, почему в ndx должно быть разное, если это одна переменная.


Просто подзабыл уже входные параметры для данного метода. А второй параметр там имя окна, в данном случае оно у тебя совпадает с урлом, что по мне, не совсем правильно.

Цитата: mafiozzzza

Может будут еще варианты, или может у кого нибудь есть успешный опыт использования функции window.open в IE?


Ссылку я уже приводил на рабочий пример. Можно конечно возразить, что там идет ссылка на страницу, а не картинку, но вот такой код:

 
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Тест</title>
</head>
<body>
    <button &#111;&#110;click="window.open('irina.jpg')">Показать картинку</button>
</body>
</html>

приводит к открытию нового окна с картинкой в IE6. Так что там все работает, ищи косяк у себя. Может где пути битые, или запрещено окрытие окон в самом ослике.
12
22 июля 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: dead_star

проверил ссылку которую давал alekciy
на их сайте, в IE, окна тоже открывает в новой вкладке


Вообще то идет открытие нового окна. Там это было так задуманно и так и было реализованно. Если браузер новые окна открывает в пределах родительского окна (как это реализованно в опере), то это абсолютно правильно. Открывается новая вкладка. Если же браузер поддерживает модель подобную IE6, то открывается новое окно. И это правильно ибо это пример реализации двух разных моделей интерфейса.

312
23 июля 2009 года
dead_star
392 / / 26.11.2006
tomafiozzzza
я таки нашел в чем проблема
проблема в настройках браузера
лезем Сервис > Свойства обозревателя
в закладке Общее смотрим пункт Вкладки и нажимаем Параметры
в группе При обнаружении всплывающего окна есть 3 варианта действий
по умолчанию стоит Всегда открывать всплывающие окна в новой вкладке
у меня IE версии 8 и по дефолту у меня этот пункт стоит
я поменял его на Всегда открывать всплывающие окна в новом окне и все заработало

toalekciy ты говорил что у тебя IE версии 6
возможно у тебя по дефолту стоят другие параметры
или ты сам их менял и забыл об этом
поэтому у тебя и открываются окна в новом окне, а не во вкладке
16K
23 июля 2009 года
k0t
97 / / 23.04.2007
Цитата:
поэтому у тебя и открываются окна в новом окне, а не во вкладке


я как всегда что-то пропустил. ИЕ6 обзавелся вкладками? о_О

312
23 июля 2009 года
dead_star
392 / / 26.11.2006
Цитата: k0t
я как всегда что-то пропустил. ИЕ6 обзавелся вкладками? о_О


ой и правда. а я и забыл
мне казалось вкладки появились какраз таки в ие6 а не в ие7
ну влюбом случае ие6 уже устарел и офециально не подерживается

40K
23 июля 2009 года
mafiozzzza
34 / / 16.07.2009
dead_star спасибо вам, действительно проблема была только в этом.
И вообще спасибо всем за помощь. Даже обидно немного, 2 суток просидел, а дело оказалось в настройках Explorer)) Блин, теперь я понимаю почему люди не любят Microsoft)
12
23 июля 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: dead_star

toalekciy ты говорил что у тебя IE версии 6
возможно у тебя по дефолту стоят другие параметры
или ты сам их менял и забыл об этом
поэтому у тебя и открываются окна в новом окне, а не во вкладке


Я конечно знаю о таких настройках, о чем уже упоминал, но ни когда их не менял ибо IE юзаю только для тестов.

Гы, IE6 сроду был безвкладковым приложением.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог