2009-08-31 1 views
2

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

Это не та же ситуация, но here's a similar report.

+0

Я, наконец, понял это и напишу полный отчет завтра. В основном проблема заключается в том, что Adobe AIR выделяет динамически генерируемые события on-events и обратное проектирование, это беспорядок: http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7f0e.html# WS5b3ccc516d4fbf351e63e3d118666ade46-7ef8 –

ответ

1

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

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, а затем декодировать его в функции. Например, если я добавил 'данных: 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.

1

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

span.onclick = function(){ someFunction('here'); } 
1

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

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

Затем после завершения загрузки я использую код делегирования событий от here поймать кликов в 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^