2009-08-31 4 views
2

私はアプリケーションの表示を動的に変更するために、少しのjQueryを使用してAdobe AIRアプリケーションを構築しています。表示の一部には、onclickイベントのJavascript関数とのリンクが含まれていますが、アプリケーション内ではdivがjQueryによって操作されたときにonclickは無視されます。私はonclickが元のHTMLの一部であるときにうまく動作し、jQuery(ブラウザで)は通常onclickイベントを含むHTMLを追加できることを確認しました。なぜAdobe AIRがその原因となるのか?jQuery、onclickイベント、およびAdobe AIRの使用

全く同じ状況ではありませんが、here's a similar reportです。

+0

私は最終的にこれを理解し、明日の完全なレポートを作成します。基本的に問題は、Adobe AIRが動的に生成されたオンイベントを取り除き、リバースエンジニアリングを混乱させてしまうことです。 http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7f0e.html# WS5b3ccc516d4fbf351e63e3d118666ade46-7ef8 –

答えて

1

これを機能させるには、私がしなければならなかったことがいくつかあります。まず、HTMLを動的に生成するときに、クリック可能にしたい(そしてonclickの動作をシミュレートする)すべての要素に一意のクラスを割り当てました。

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); 
} 
} 
:私はクリック可能なアクションを必要とするものにイベントリスナーを追加し、

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

し、それらを通じて反復:表示が生成された後、私は次のようなページ上のすべてのスパンを引っ張っ

要するに、これらのスパンのいずれかにクリックイベントが発生したときにいつでも関数を割り当てることができます。残念ながら、関数に変数を渡したいと思っていました。私は要素の中のそれらを擬似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); 
} 

Tada Adobe AIRのonclickイベントを再び有効にするための奇抜な方法。

1

私が使用しているのは、addEventListenerの関数パラメータを使用できないことに限定されません。

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

私はこれに対する解決策も探していました。
アプリが読み込まれると空のdivが表示されます。負荷後の

その後
<div id="left-list"> 
</div> 

は、私はdiv要素でクリックをキャッチし、クリックされたかを把握するためにhereからイベント委任コードを使用して完了です。私の場合は、クラスリスト項目でdivにボタンを追加します。

$(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); 
}