Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как добавить ссылку на событие в js-код? (https://javascript.ru/forum/misc/12451-kak-dobavit-ssylku-na-sobytie-v-js-kod.html)

dess 18.10.2010 16:51

Как добавить ссылку на событие в js-код?
 
Есть следующий код, который занимается тем, что цепляет из определенного адреса название сообщения и ссылку на него, а затем генерирует список таких ссылок:

<script type="text/javascript">
function tMess(n){
var a=[' новое сообщение',' новых сообщения',' новых сообщений'];
return a[n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2]
}; 
function getPM(){
$.get("/messages",function(a){var s=$("b.unread",a).size();
if (s) {var n=tMess(s),all=[],leg=(s==1)?'Сообщение':'Сообщения';$("b.unread",a).each(function(){var title = $(this).html(), href = $(this).parent().attr("href"); all.push('» <a href="'+href+'">'+title+'</a>'
);}); 

new _uWnd('ls','Новые сообщения',250,120,{icon:'/images/message.png',align:'left'},'<center>У тебя '+s+n+'!</center><br><fieldset><legend>'+leg+'</legend>'+all.join("<br>")+'</fieldset>'
);}});
setTimeout(getPM,10000)};
getPM();
</script>


Задача в том, чтобы эта ссылка, сгенерированная указанным выше скриптом, выполняла следующую функцию:

onclick="openLayerB('PM',0,'/js/profile/pm.xml','Личные сообщения',750,410,'0','','',0,'justify'); $('#newmessage').dialog('close'); return false;"


  • Как синтаксически правильно интегрировать это событие onclick в верхний скрипт?
  • И, если такое невозможно, то каким образом можно хотябы присвоить такой ссылке атрибут rel.
  • И если второй вариант невозможен, то как просто вставить в генерируемый html статическую ссылку


Спасибо. Я пытался решить вопрос самостоятельно, но тщетно. С синтаксисом плохо ориентируюсь.

monolithed 18.10.2010 22:39

1. пока что у вас что-то не связное выходит
2. в jQuery для события onclick, другой синтаксис:
$('element').click(function(){});

Jurasmi 22.10.2010 13:29

Можно навешивать обработчики события "click" после вставки HTML-элементов на страницу.
Назначить класс у ссылки:
all.push('<a href="'+href+'" class="handled">'+title+'</a>');

потом назначить обработчики:
var handler = function(){
		openLayerB('PM',0,'/js/profile/pm.xml','Личные сообщения',750,410,'0','','',0,'justify'); 
		$('#newmessage').dialog('close'); 
		return false;
	};
$('a.handled').live('click', handler);



Или, если для вставки ссылок в документ вы используете что-то вроде innerHTML, то при генерировании ссылки можно написать так:
var handler = function(){
		openLayerB('PM',0,'/js/profile/pm.xml','Личные сообщения',750,410,'0','','',0,'justify'); 
		$('#newmessage').dialog('close'); 
		return false;
	};
all.push('<a href="'+href+'" onclick="handler()">'+title+'</a>');

dess 28.10.2010 06:27

Jurasmi, спасибо, но я так и не разобрался как это подогнать под свой код...

Вот:
function tMess(n){var a=[' новое сообщение',' новых сообщения',' новых сообщений'];return a[n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2];};function getPM(){$.get("/index/14",function(a){var s=$("b.unread", a).size();if(s){var n=tMess(s),h=_uWnd.getdims(),j=h.clientW-245,g=h.clientH-135,href=(s==1)?$("b.unread",a).parent().attr("href"):'/index/14';new _uWnd('ls','Уведомление',200,100,{icon:'http://javascript.ucoz.net/images/message.png',min:0,max:0,x:j,y:g,alert:1,autosize:1,fixed:1,shadow:1,resize:0,fadetype:1,fadespeed:1000,fadeclosetype:2,fadeclosespeed:400},'Пришло '+s+n+'! <br><hr><a id=msn class=cbut style=cursor:default>открыть</a>');$('#msn').click(function(){openLayerB('PM',0,'/js/profile/pm.xml','Личные сообщения',750,410,'0','','',0,'justify');_uWnd.close('ls');});}});setTimeout(getPM,120000)};getPM();


Мне нужно сделать ссылку в этом участке:
<a id=msn class=cbut style=cursor:default>открыть</a>

Jurasmi,

monolithed 28.10.2010 07:47

Цитата:

Сообщение от dess
<a id=msn class=cbut style=cursor:default>открыть</a>

кавычки проставьте

dess 28.10.2010 11:22

Цитата:

Сообщение от monolithed (Сообщение 76237)
кавычки проставьте

я проставлял. скрипт не работает... т.е. при клике на ссылку ничего не происходит...

monolithed 28.10.2010 11:46

Цитата:

Сообщение от dess
я проставлял. скрипт не работает... т.е. при клике на ссылку ничего не происходит...

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

В вашем коде никто разбираться не будет пока вы его не приведет в порядок.

вызов к.л. функции может производится к примеру так:
$('#msn').click(function(){
tMess(n);
});

если вы этого не понимаете, следуйте в раздел работа

dess 28.10.2010 12:06

Цитата:

Сообщение от monolithed (Сообщение 76264)
не удивлюсь если вы один из адептов курса Е.Попова.

1. monolithed, я не просил мне хамить. Если вам нравится оскорблять незнакомых людей, попробуйте сделать это лично, а не публично да еще и в интернете.
2. Если никто не будет смотреть код, значит так и будет. Не нужно выражений. Я никого не обязываю смотреть эту тему, если не нравится — проходите мимо, а если есть предложения по оформлению — в ЛС.
3. Я бы не обращался за помощью если бы разбирался в языке и в том каким должен быть код. И если мой код ужасен (я не программист), то я предпочитаю остаться без ответа чем наслушаться грубостей на форуме.

monolithed 28.10.2010 13:07

Цитата:

Сообщение от dess
1. monolithed, я не просил мне хамить.

каким образом я вам нахамил? если это по вашему хамство, то вы явно ошиблись форумом.

т.к. здесь есть какие-то минимальные устоявшиеся правила форматирования кода, а если вы не можете не пытаетесь даже приложить усилия для решения вашей проблемы и подготовить код перед тем как покатать его кому-то то идите в раздел работа.

Цитата:

Сообщение от dess
а если есть предложения по оформлению — в ЛС.

в частном порядке вопросы решаются в разделе работа.

Цитата:

Сообщение от dess
3. Я бы не обращался за помощью если бы разбирался в языке и в том каким должен быть код. И если мой код ужасен (я не программист), то я предпочитаю остаться без ответа чем наслушаться грубостей на форуме.

Давать советы и не читать правила это по вашему глупости?

dess 28.10.2010 14:04

Цитата:

Сообщение от monolithed (Сообщение 76286)
каким образом я вам нахамил?

А, по-вашему, нормально причислять людей к каким-то адептам чьих-то курсов?
Вы — модератор? Если да, то в таком случае просто удалите мою тему без полемики, а если нет, то не нужно тыкать людей в правила лицом в такой форме.

Цитата:

Сообщение от monolithed (Сообщение 76286)
вы явно ошиблись форумом.

Вы правы, я серьезно сглупил, обратившись к братьям по языку, ведь, как оказалось, на stackoverflow явно куда безопаснее обращаться за помощью, хоть и на английском. Кстати, если уж вы так яро отстаиваете традиции форума... Вы понизили карму не моему однодневному профилю, а карму и репутацию форуму в целом в глазах тех, кому я буду его «рекомендовать». Мою тему удалят, но мнение о форуме останется надолго.

Цитата:

Сообщение от monolithed (Сообщение 76286)
Давать советы и не читать правила это по вашему глупости?

Я говорил не «глупости», а грубости. Ваши «советы» высказаны в весьма грубой форме. Знаете, когда нибудь и вам придется задать вопрос в теме, в которой вы мало что смыслите. Причем не потому, что не хотите делать ничего сами, а потому, что у вас нет выхода. Не думаю, что вам будет приятно, когда вас пошлют в раздел «работа» или еще куда из-за одной неисправной строки. Я приложил усилия в поиске решения и пытался по-разному настроить и синтакис и по-разному вызывать функцию... Я точно знаю, что код не работает именно из-за ссылки.

Тема закрыта, т.к. на этот же вопрос с первого раза ответили ребята на stackoverflow. Можно удалять за «нарушение правил», «неОдекватное поведение» и «расхлябаный код» :) В том числе и мой профиль тоже, т.к. судя по приёму, он мне больше не понадобится. Буду благодарен.

P.S. На заметку: «неодекватное» пишется через «а», «расхлябаный» пишется с двумя «н», а «по вашему» — через дефис. У вас на форуме нет правил по правописанию случайно? Ведь такое «расхлябанное» письмо неудобно читать (как и мой код, наверное)


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