Изменить событие по клику
Добре товарищи!
Имеем чат и список юзеров соответственно, сейчас по клику на ник он выводит меню с дополнительными функциями, очень хочется научить его вставлять по клику ник юзера с запятой в окно ввода текста, а лучше по клику ЛКМ. Вот фрагмент кода который как я понимаю формирует юзер лист: kide.insert_sesion = function(user) { var div = document.createElement('div'); div.setAttribute('style', 'cursor:pointer'); div.setAttribute('class', user._class); div.onclick = function() { kide.mostrar_usuario(user.id, user.name, user.rango, user.sesion, user.profile, user.img) }; div.innerHTML = user.name; this.$('KIDE_usuarios').insertBefore(div, this.$('KIDE_usuarios').firstChild); }; а вот код который умеет вставлять в в окно ввода текста ники (первоначально вставляет код смайликов): <a href="javascript:kide.insertSmile(' Выводимый текст ')"> Отображаемый текст </a> На всякий случай ссылка на файл JS: https://noviy-kovcheg.ru/components/...ult/js/kide.js |
Цитата:
kide.insertSmile(user.name + ', '); вместо kide.mostrar_usuario(user.id, user.name, user.rango, user.sesion, user.profile, user.img) |
Ubivectel,
kide.insert_sesion = function(user) { var div = document.createElement('div'); div.setAttribute('style', 'cursor:pointer'); div.setAttribute('class', user._class); div.onclick = function() { kide.mostrar_usuario(user.id, user.name, user.rango, user.sesion, user.profile, user.img) }; div.innerHTML = user.name; div.addEventListener('contextmenu', function(event) { event.preventDefault(); kide.insertSmile(user.name + ', '); }, true); this.$('KIDE_usuarios').insertBefore(div, this.$('KIDE_usuarios').firstChild); }; |
спасибо рони, как всегда все работает, и правда профессор! :)
|
Все, окончательно все сделал, только поменял местами события, левый клик вставляет ник, а правый вызывает меню. Хотел проделать тоже самое с никами в окне сообщений, но похоже, что там клик обрабатывает не JS а PHP, и по образу и подобию сделать не прокатило :(
|
На случай если кто-то php понимает не хуже JS:
echo '<span style="cursor: pointer" title="'.$tiempo.'" onclick="kide.mensaje(\''.addslashes($r->name).'\','.$r->userid.','.$r->id.',\''.$r->url.'\',\''.$tiempo.'\',\''.$r->sesion.'\','.$r->rango.',\''.$r->img.'\')" class="'.KideHelper::getRango($r->rango, 'KIDE_').'">'; |
Цитата:
|
Спасибо, понял, полез искать где оно в скрипте)
|
Цитата:
echo '<span style="cursor: pointer" title="'.$tiempo.'" onclick="kide.insertSmile(\''.addslashes($r->name).'\')">'; |
Да, все работает, еще бы запятую с пробелом добавить, а первоначальный код вызывать по правому клику)
|
Тперь вставляет все как надо, вот что в итоге у меня получилось:
echo '<span style="cursor: pointer" title="'.$tiempo.'" onclick="kide.insertSmile(\''.addslashes($r->name), ', '.'\')" class="'.KideHelper::getRango($r->rango, 'KIDE_').'">'; Осталось повесить меню на правый клик, и счастье станет полным )))) |
Цитата:
|
Однако вот что выяснил в ходе экспериментов, код PHP отвечает за сообщения отправленные в чат до последнего обновления страницы, сейчас вписал: oncontextmenu и все заработало как надо, но, сообщения поступающие вновь по прежнему открывают меню, и если я правильно понял отвечает за это опять таки JS, вот этот фрагмент:
kide.insertNewContent = function(uid,name,text,url,ti,color,rango,id,sesion,yo,hora,img) { if (text.replace(/ /g, "") != "") { var c = color.length>0 ? 'style="color:#'+color+'" class="KIDE_msg"' : 'class="KIDE_dc_'+this.rangos[rango]+' KIDE_msg"'; var div = this.$('KIDE_msgs'); var nodo = document.createElement('div'); var insertO = this.$("KIDE_output"); var s_hora; nodo.setAttribute('id', 'KIDE_id_'+id); nodo.setAttribute('class', 'KIDE_msg_top'); if (this.show_hour) s_hora = '<span title="'+ti+'" class="KIDE_msg_hour">'+hora+'</span> '; else s_hora = ''; var tmp = ''; if (img && kide.show_avatar) { var style = kide.avatar_maxheight ? 'style="max-height:'+kide.avatar_maxheight+'" ' : ''; tmp = '<img '+style+'src="'+img+'" class="KIDE_icono" alt="" /> '; } nodo.innerHTML = s_hora+tmp+'<span style="cursor: pointer" class="KIDE_'+this.rangos[rango]+'" onclick="kide.mensaje(\''+name+'\', '+uid+', '+id+', \''+url+'\', \''+ti+'\', \''+sesion+'\', '+rango+', \''+img+'\')">'+name+'</span>: <span '+c+'>'+this.filter_smilies(text)+'</span>'; if (this.order == 'bottom') { this.insertAfter(nodo, insertO.lastChild); } else insertO.insertBefore(nodo, insertO.firstChild); if (!yo && this.sound == 1) this.play_msg_sound(); this.ajustar_scroll(); } }; Попытался сделать так, заменил это: onclick="kide.mensaje(\''+name+'\', '+uid+', '+id+', \''+url+'\', \''+ti+'\', \''+sesion+'\', '+rango+', \''+img+'\')">'+name+'</span>: <span '+c+'>'+this.filter_smilies(text)+'</span>'; На это: onclick=kide.insertSmile(user.name + ', '); Но видимо напутал с синтаксисом, такая конструкция "ломает" юзерлист и пользователи вообще не отображаются, да и с правым/левым бы лучше сразу правильно сделать. Рони, в php все верно: oncontextmenu заработал как надо по правому клику, хотя интересно, что в отличии от JS не удаляет штатное, контекстное меню браузера. Впрочем бог с ним php, поскольку очевидно что главное, что бы левый клик - ник, правый - меню работали именно на вновь поступающих сообщениях. |
Цитата:
|
Цитата:
|
Я уяснил, что надо добавить это:
div.addEventListener('contextmenu', function(event) { event.preventDefault(); к этому: nodo.innerHTML = s_hora+tmp+'<span style="cursor: pointer" class="KIDE_'+this.rangos[rango]+'" onclick="kide.mensaje(\''+name+'\', '+uid+', '+id+', \''+url+'\', \''+ti+'\', \''+sesion+'\', '+rango+', \''+img+'\')">'+name+'</span>: <span '+c+'>'+this.filter_smilies(text)+'</span>'; Но как я это не впихиваю, оно ломает юзерлист, по примеру нифига не понимаю как сделать, строки слишком разные ( |
Ubivectel,
:-? oncontextmenu="event.preventDefault();прежний код onclick" |
Ubivectel,
onclick="kide.insertSmile(\''+name+\', ')"; |
Как же неприятно чувствовать себя тупым)))
Этот ведь для PHP строка, если я правильно понимаю? oncontextmenu="event.preventDefault();прежний код onclick" |
Не судите строго, я пока только по учебнику в JS "привет мир" вывожу, в самом начале я )
|
Сечас выглядит вот так:
onclick="kide.insertSmile(\''+name+\', ')"; nodo.innerHTML = s_hora+tmp+'<span style="cursor: pointer" class="KIDE_'+this.rangos[rango]+'" onclick="kide.mensaje(\''+name+'\', '+uid+', '+id+', \''+url+'\', \''+ti+'\', \''+sesion+'\', '+rango+', \''+img+'\')">'+name+'</span>: <span '+c+'>'+this.filter_smilies(text)+'</span>'; Хоть убей не понимаю как вот это: oncontextmenu="event.preventDefault();прежний код onclick" добавить :( |
Сейчас выглядит вот так:
onclick="kide.insertSmile(\''+name+\', ')"; nodo.innerHTML = s_hora+tmp+'<span style="cursor: pointer" class="KIDE_'+this.rangos[rango]+'" onclick="kide.mensaje(\''+name+'\', '+uid+', '+id+', \''+url+'\', \''+ti+'\', \''+sesion+'\', '+rango+', \''+img+'\')">'+name+'</span>: <span '+c+'>'+this.filter_smilies(text)+'</span>'; ничего конечно не работает, хоть убей не пойму как правильно это: oncontextmenu="event.preventDefault();прежний код onclick" добавить. :( |
Ubivectel,
сначала php сделайте, там нужно было добавить event.preventDefault(); Цитата:
|
Ubivectel,
копируйте полностью и заменяйте nodo.innerHTML = s_hora+tmp+'<span style="cursor: pointer" class="KIDE_'+this.rangos[rango]+'" onclick="kide.insertSmile(\''+name+', \')" oncontextmenu="event.preventDefault();kide.mensaje(\''+name+'\', '+uid+', '+id+', \''+url+'\', \''+ti+'\', \''+sesion+'\', '+rango+', \''+img+'\')">'+name+'</span>: <span '+c+'>'+this.filter_smilies(text)+'</span>'; |
Аааааа, я просто выше написал, что в php делать необходимости нет, поскольку никто же постоянно не обновляет страницу, то есть там вполне можно оставить как есть. По сути сейчас единственная задача заставить это работать в JS.
В юзерлисте сейчас идеально работает, левый клик - ник, правый - меню. То есть сделать тоже самое с никами в окне сообщений и задача завершена ) |
oncontextmenu="event.preventDefault();прежний код onclick"Это сделал, теперь в php все корректно и красиво) |
Цитата:
|
Цитата:
|
Вот это полезно, записал в моск
|
Часовой пояс GMT +3, время: 00:34. |