Использование jQuery, события onclick и Adobe AIR

Я создаю приложение Adobe AIR с небольшим количеством jQuery для динамического изменения отображения приложения. Часть отображения включает ссылки с функциями Javascript в событии onclick, за исключением того, что в приложении onclick игнорируется, когда jQuery манипулирует элементом div. Я подтвердил, что onclick работает нормально, когда он является частью исходного HTML, а jQuery (в браузере) обычно способен добавлять HTML, включающий событие onclick. Есть идеи, почему Adobe AIR заставляет его задыхаться?

Это не совсем та же ситуация, но вот аналогичный отчет.


person Daniel Bachhuber    schedule 31.08.2009    source источник
comment
Я наконец понял это, и завтра напишу полный отчет. По сути, проблема заключается в том, что Adobe AIR удаляет динамически генерируемые on-события, и их реинжиниринг приводит к беспорядку: .html#WS5b3ccc516d4fbf351e63e3d118666ade46-7ef8" rel="nofollow noreferrer">help.adobe.com/en_US/AIR/1.5/devappshtml/   -  person Daniel Bachhuber    schedule 09.09.2009


Ответы (3)


Есть несколько вещей, которые я должен был сделать, чтобы заставить это работать. Во-первых, при динамической генерации HTML я присвоил уникальный класс всем элементам, которые хотел сделать интерактивными (и имитировать поведение при клике). После того, как отображение было сгенерировано, я вытащил все промежутки на странице как таковые:

var span = document.getElementsByTagName('span');

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

for(var i=0; i<span.length; i++){
if (span[i].className == "firstUniqueClass") {
    span[i].addEventListener("click", firstUniqueFunction, false);
} else if (span[i].className == "secondUniqueClass") {
    span[i].addEventListener("click", secondUniqueFunction, false);
}
}

Короче говоря, это дает мне возможность назначать функцию всякий раз, когда происходит событие щелчка на одном из этих диапазонов. К сожалению, я также хотел передать переменные в свои функции. В итоге мне пришлось кодировать их в элементе в псевдо-RDF, а затем декодировать в функции. Например, если бы я добавил 'data:url="http://www.google.com/"', я бы перегенерировал его как таковой:

function copyLink(event) {
    var startPos = event.currentTarget.outerHTML.indexOf('data:url="') + 10;
    var endPos = event.currentTarget.outerHTML.indexOf('"', startPos + 2);
    var link = event.currentTarget.outerHTML.slice(startPos, endPos);
}

Тада. Хакерский способ повторного включения события onclick в Adobe AIR.

person Daniel Bachhuber    schedule 12.10.2009

Вот что я использую, что не ограничивает вас отсутствием у addEventListener возможности использовать параметры функции.

span.onclick = function(){ someFunction('here'); }
person Brendon Thrash    schedule 09.08.2010

Я также искал решение этой проблемы, и вот что у меня получилось.
У меня пустой div при загрузке приложения.

<div id="left-list">
</div>

Затем, после завершения загрузки, я использую код делегирования события из здесь для перехвата кликов в div и выяснить, что было нажато. В моем случае я добавляю кнопки в div с классом list-item.

$(document).ready(function(){
    $('#left-list').click(function(e){
    if( $(e.target).is('.list-item') )
        loadListItem(e);
    });
});

Теперь я могу вытащить нужные атрибуты и делать что-то.

function loadListItem(e){
    var itemID = e.target.id;
    var source = $('#'+itemID).attr('src');
    alert(itemID + ' ' + source);
}
person Aaron    schedule 26.04.2011