Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > обьект из event


Автор: neoks 8.12.2011, 16:21
Кароче вот, не знаю, уже целый день рыскаю.
Суть такова, есть событие которое сробатывает при клике, так вот, передается событие event, но не как сообразить не могу, как из этого event получить обьект с которым мне потом нужно работать.

Такой вот маленький вопрос а затенулся почти на весь день, Очень нужна ваша помошь ))

Автор: Stolzen 8.12.2011, 16:32
А с каким объектом вам потом нужно работать? 

Автор: neoks 8.12.2011, 16:52
Вот скрипт
Код

var last_move = {x:0,y:0};
    function touchHandler(event)
{

    var touches = event.changedTouches,
        first = touches[0],
        type = "";
         switch(event.type)
    {
        case "touchstart": type = "mousedown"; break;
        case "touchmove":  type="mousemove"; break;
        case "touchend":   type="mouseup"; break;
        default: return;
    }

             //initMouseEvent(type, canBubble, cancelable, view, clickCount,
    //           screenX, screenY, clientX, clientY, ctrlKey,
    //           altKey, shiftKey, metaKey, button, relatedTarget);

    var simulatedEvent = document.createEvent("MouseEvent");

    simulatedEvent.initMouseEvent(type, true, true, window, 1,
                              first.screenX, first.screenY,
                              first.clientX, first.clientY, false,
                              false, false, false, 0/*left*/, null);

    first.target.dispatchEvent(simulatedEvent);

    if(type == 'mousemove'){
        if(first.clientY !== last_move.y){

            event.preventDefault();
        }
    }
    if(type == 'mouseup'){
        last_move.y = first.clientY;
        //lines.hoverInput(true,$(this).attr('id'));
        //lines.closeLine();
        statusBar(event.object)
    }

    if(event.target.class == 'output'){
        $('.drag').draggable('disable');

    }
    else{
        $('.drag').draggable('enable');
    }

    

}

function init_touch()
{
    document.addEventListener("touchstart", touchHandler, true);
    document.addEventListener("touchmove", touchHandler, true);
    document.addEventListener("touchend", touchHandler, true);
    document.addEventListener("touchcancel", touchHandler, true);
}
init_touch();


Есть event, вот теперь мне нужно получить свойства обьекта к примеру : $(object).attr('id') вот как мне найти обьект из event, возможно this но не работает, пробую на планшете )

Автор: Stolzen 8.12.2011, 17:02
Раз используете jquery, то применяйте лучше его для обработки событий. Можно использовать это - http://api.jquery.com/mousedown/

Вот пример: 

Код

$("p").mouseup(function(){
      $(this).append('<span style="color:#F00;">Mouse up.</span>');
}).mousedown(function(){
      $(this).append('<span style="color:#00F;">Mouse down.</span>');
});


В этих функциях this - ссылка на нужный объект.

Автор: neoks 8.12.2011, 17:06
Ага, это гуд, но планшет на базе андроид этого не понимает, ему нужен особый скрипт, но вот и застрял, так как не знаю как получить обьект из event, хотя может это вообше нельзя так сделать ?

Автор: Amphiluke 8.12.2011, 17:07
Цитата(neoks @  8.12.2011,  20:52 Найти цитируемый пост)
возможно this но не работает, пробую на планшете

Конечно, this не будет работать, поскольку вы регистрируете слушателя на объект document. Вот на document и будет всегда ссылаться this.
А вот event.target должно быть тем, что нужно, если, конечно, под object вы подразумеваете объект, вызвавший событие.
Цитата(neoks @  8.12.2011,  20:52 Найти цитируемый пост)
мне нужно получить свойства обьекта к примеру : $(object).attr('id')


Добавлено через 2 минуты и 9 секунд
Цитата(neoks @  8.12.2011,  20:52 Найти цитируемый пост)
event.target.class

А вот это вообще ошибка. Что за свойство class? Вроде, слово зарезервировано.

Автор: neoks 8.12.2011, 17:15
Почти понял, но вот снова загвостка, как проверить что я нахожусь на нужном классе.

Код

if(event.target.className == 'input'){
            alert('f')
        }


Но это не то )

Добавлено через 1 минуту и 9 секунд
Так как может вернуть например position drag input

Автор: Amphiluke 8.12.2011, 17:18
Код

if(event.target.className.match(/\binput\b/) {

Автор: neoks 8.12.2011, 17:39
Эхх, спасибо за помошь, но всеравно не работает, кароче я запарился с этим скриптом.
И на последок ктонить знает как эмулировать события onmouserover для мобильных версии браузера ?

Автор: Amphiluke 8.12.2011, 18:16
ИМХО, если реализация какого-то сценария приводит к необходимости эмуляции низкоуровневых событий, есть серьезные основания задуматься о том, чтобы отказаться совсем от такой реализации, или измененить логику работы сценария, или еще что-то. Эмулировать стоит только высокоуровневые и искусственные события (и то далеко не всегда). Я бы оставил эмуляцию событий с помощью createEvent/initEvent/dispatchEvent на самый крайний случай, когда никакие другие средства не работают.

Автор: neoks 8.12.2011, 18:22
Просто у меня в скрипте есть события на  mouseover and mouseout, для браузера все пучком, но вот хочу чтоб и на планшете работало, вот тока уже не знаю как это замутить вместо mouseover and mouseout ))

Даже не знаю как придумать, и даже mouseup не срабатывает, вообшем очень все плохо  smile 

Автор: Amphiluke 8.12.2011, 18:36
А вы не пробовали всё-таки использовать уже проверенные заточенные под мобильные устройства библиотеки? http://jquerymobile.com/demos/1.0/docs/api/events.html, например.

Автор: neoks 8.12.2011, 18:45
Вау, полезная ссылка, Спасибо ) , буду смотреть, событий много надо будет разобратся  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)