Использование jQuery, события onclick и Adobe AIR - PullRequest
2 голосов
/ 01 сентября 2009

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

Это не совсем та же ситуация, но вот похожий отчет .

Ответы [ 3 ]

1 голос
/ 09 августа 2010

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

span.onclick = function(){ someFunction('here'); }
1 голос
/ 26 апреля 2011

Я тоже искал решение этой проблемы, и вот чем я закончил.
У меня есть пустой 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);
}
1 голос
/ 12 октября 2009

Я должен был сделать пару вещей, чтобы заставить это работать. Во-первых, при динамическом генерировании 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...