2013-07-23 46 views
1

我在頁面的標題部分使用了2個定位標記,並且想要捕獲它們上的點擊事件,因此我可以打開面板。如果我使用按鈕而不是錨標籤,我可以很容易地用它們的id來抓住它們,例如;在jQuery手機上選擇定位標記

$(document).on('click', function(evt){ 
     var target = evt.target; 
     var targetId = target.getAttribute('id'); 

     if(targetId === 'openRightPanel'){ 
      $('.right-panel').panel('open'); 
      evt.stopImmediatePropagation(); 
      evt.preventDefault(); 
     } 
} 

但是,如果我使用錨標籤,我不能得到像這樣的點擊事件;

if(targetId === 'openRightPanel'){ 
      $('.right-panel').panel('open'); 
      evt.stopImmediatePropagation(); 
      evt.preventDefault(); 
} 

即使我的錨標記具有openRightPanel的ID。

我意識到jQuery mobile正在我的html中創建一些新的div,所以我開始使用這段代碼來捕獲這個點擊事件;

while (target !== null) { 
       if(target['id'] === 'openLeftPanel'){ 
        $('.left-panel').panel('open'); 
        isPreventOn = true; 
       } 
       else if(target['id'] === 'openRightPanel'){ 
        $('.right-panel').panel('open'); 
        isPreventOn = true; 
       } 
       target = target.parentNode; 
      } 

這一項工作正常,但在Android 4.1創造了一些問題,並具有while循環正好趕上click事件似乎沒有我的權利。

所以我的問題是我怎麼能捕捉到這些錨定標記的點擊事件jQuery手機沒有循環或有沒有不同的方式來獲得該事件?這些是我想要獲得的錨定標記;

<div data-role="header"> 
    <h1>title</h1> 
    <a id="openLeftPanel">open</a> 
    <a id="openRightPanel">open</a> 
</div><!-- /header --> 
+0

錨被轉換成按鈕。您可以將偵聽器附加到兩者。這些錨是動態創建的還是靜態的? http://fiddle.jshell.net/PYHRJ/1/ – Omar

回答

0

您可以直接對選擇

$("#openLeftPanel").off('click').on('click', function(evt){ 

}); 

$("#openRightPanel").off('click').on('click', function(evt){ 

}); 
+0

是的,它確實工作,但爲什麼這是行不通的,如果我把它附加到文檔。我用這種方式獲得更好的性能有什麼不同。 – bamya

+1

@BurakBayram附加事件文檔,是指文檔中的所有項目,這意味着由於傾聽和處理每次點擊而導致性能下降。 – Omar

+0

感謝您的幫助。 – bamya

0

點擊活動,請不要點擊事件附加到文件,將其連接到錨定體。

您有:

$(document).on('click', function(evt){...}); 

你應該有:

$('[data-role="header"] a').on('click',function(evt){...}); 

或者,只是分隔功能都:在頭

$('#openLeftPanel').on('click',function(evt){...}); 
$('#openRightPanel').on('click',function(evt){...}); 
+0

是的,它確實工作,但爲什麼這是行不通的,如果我把它附加到文檔。我用這種方式獲得更好的性能有什麼不同。 – bamya