Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.07.2011, 19:40
Интересующийся
Отправить личное сообщение для c124578 Посмотреть профиль Найти все сообщения от c124578
 
Регистрация: 09.07.2011
Сообщений: 21

Как правильно повесить событие на кнопку
Есть такая кнопка, созданная JS на стороне клиента:
<button class="DeleteItem"></button>
к ней прикручен обработчик:

var c=document.createElement("button");
c.className="DeleteItem";
conteiner.appendChild(c);
c.onclick=DeleteCookie;

вот функция:

function DeleteCookie(e) {
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation(); // подавляем всплывание
var x=e.target||e.srcElement;
x=x.parentNode; // контейнер, в котором запись
var id=x.innerHTML.match(/в базе[^\d]{1,5}([0-9]+)<\//); // ее ID
setcookie("id"+id[1], 0, -1000); // вычеркиваем из блокнота
x.removeChild(x.lastChild); // удаляем эту самую кнопку
}

Все работает, как надо. Это для удаления выбранной записи, предназначенной для блокнота.
PHP скрипт, выдающий записи, при повторном, например, посещении страницы, на основании кук рисует такую кнопку:
<button type="button" onClick=DeleteCookie(click) class="DeleteItem"></button>
Она работает неправильно: x неопределен, кнопка не удаляется.
Firebug для JSной кнопки показывает, onClick -> DeleteCookie(e), а для PHPной onclick -> onclick(event)
attributes -> [class="DeleteItem", onclick="DeleteCookie", type="button"]
Я не знаю, почему разные определения получаются, кто знает расскажите, как PHP кнопку сделать идентичной JS кнопке.
Ответить с цитированием
  #2 (permalink)  
Старый 31.07.2011, 09:37
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 31.07.2011, 11:25
Интересующийся
Отправить личное сообщение для c124578 Посмотреть профиль Найти все сообщения от c124578
 
Регистрация: 09.07.2011
Сообщений: 21

Есть такая кнопка, созданная JS на стороне клиента:
<button class="DeleteItem"></button>

к ней прикручен обработчик DeleteCookie:

var c=document.createElement("button");
c.className="DeleteItem";
conteiner.appendChild(c);
c.onclick=DeleteCookie;


вот функция:

function DeleteCookie(e) {
   if (!e) var e = window.event;
   e.cancelBubble = true;
   if (e.stopPropagation) e.stopPropagation(); // просто подавляем всплывание
   var x=e.target||e.srcElement; //взяли элемент, в котором произошло событие
   x=x.parentNode; // контейнер, в котором запись
   var id=x.innerHTML.match(/в базе[^\d]{1,5}([0-9]+)<\//); // ее ID в базе
   setcookie("id"+id[1], 0, -1000); // вычеркиваем из блокнота
   x.removeChild(x.lastChild); // удаляем эту самую кнопку
}


Все работает, как надо. Это для удаления выбранной записи, предназначенной для блокнота.
PHP скрипт, выдающий записи, при повторном, например, посещении страницы, на основании кук рисует такую кнопку:
<button type="button" onClick=DeleteCookie(click) class="DeleteItem"></button>

Она работает неправильно: x неопределен, кнопка не удаляется.
Firebug для JSной кнопки показывает, onClick -> DeleteCookie(e), а для PHPной onclick -> onclick(event)
attributes -> [class="DeleteItem", onclick="DeleteCookie", type="button"]
Я не знаю, почему разные определения получаются, кто знает расскажите, как PHP кнопку сделать идентичной JS кнопке.
Ответить с цитированием
  #4 (permalink)  
Старый 31.07.2011, 11:30
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

x.removeChild(x.lastChild); // удаляем эту самую кнопку

???

попробуй так. убери обработчики из вывода php. они будут назначаться скриптом

HTML:
<button type="button" class="DeleteItem"></button>


JS:
function DeleteCookie(e) {
    var x;
    
    if( e ){
        e.stopPropagation();
        x = e.target;
    } else {
        e = window.event;
        e.cancelBubble = true;
        x = e.srcElement;
    }

    var id = x.innerHTML.match(/в базе[^\d]{1,5}([0-9]+)<\//)[1]; 
    
    setcookie("id" + id, 0, -1000);
    
    x.parentNode.removeChild(x);
}


а это в конец body :
var a = document.getElementsByTagName("button"),
    b = a.length;
while (b--)
    if (a[b].className === "DeleteItem") 
            a[b].onclick = DeleteCookie;

Последний раз редактировалось melky, 31.07.2011 в 11:41.
Ответить с цитированием
  #5 (permalink)  
Старый 31.07.2011, 12:07
Интересующийся
Отправить личное сообщение для c124578 Посмотреть профиль Найти все сообщения от c124578
 
Регистрация: 09.07.2011
Сообщений: 21

Спасибо, я так и сделал в конце-концов, обработчики назначил скриптом, я думал, что не знаю чего-то очевидного, непонятно почему обработчик, назначенный JS, понимается как обработчик, а переданный PHP - определяется, как атрибут.
На будущее пригодится, поэтому хотел узнать.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается повесить событие wine-time Элементы интерфейса 2 23.07.2011 03:54
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14
Как правильно обработать событие? BAnder Events/DOM/Window 19 03.02.2009 14:09
Как имитировать событие мыши Andrey_V Общие вопросы Javascript 4 10.11.2008 16:39
Как правильно оформить Send() Алекс97 AJAX и COMET 20 30.10.2008 19:19