2012-02-21 65 views
4

如果我有這個網站:的jQuery(移動) - 點擊事件綁定到一個div

<div id="myDiv"></div> 

這個CSS:

#myDiv{ 
    background:url('../images/someImage.png') no-repeat; 
    background-size:100%; 
    width:44px; 
    height:44px; 

} 

我需要打開一個新的頁面,當用戶水龍頭在myDiv上。我有一個外部的js文件,其中我有這樣的:

function bindMyDiv(){ 
    $("#myDiv").bind('tap',function(event, ui){ 
     alert("binding"); 
    }) 
} 

但我不明白的地方,從HTML調用此方法,或者如果這是連去這個正確的方式。建議嗎?

回答

0

您想在pageinit事件中爲其所在的頁面調用該函數。您可以使用jQuery Mobile中的其他頁面事件,如:pagecreatepageshow等,但我認爲pageinit是您最好的選擇。

的實施將是這個樣子:

$(document).delegate('#page-id', 'pageinit', function() { 
    $("#myDiv").bind('tap',function(event, ui){ 
     alert("binding"); 
    }) 
}); 

OR

$(document).delegate('#page-id', 'pageinit', bindMyDiv); 

你會在其中您的DIV所在的data-role="page"元素的ID代替#page-id

此方法優於#myDiv元素的事件委派,因爲直接綁定到元素會在事件觸發時創建更少的開銷。如果您使用事件委託,那麼事件必須冒泡到委派根。

1

嘗試

$("#myDiv").live("tap", function(event){ 
    alert('binding'); 
}); 

您可以一邊把這個你onReady JavaScript文件

編輯:這裏提供了不同的解決方案爲您辦理不錯的洞察力

http://jsfiddle.net/R9e6u/

+1

你不應該需要放置一個'document.ready'事件處理中因爲它是事件委託,所以它直接綁定到始終可用的'document'元素。 '.delegate()'優於'.live()',從jQuery 1.7開始,'.live()'被折舊。 – Jasper 2012-02-21 23:54:35

+0

你是對的,但是目前jQuery支持到1.6.4,它使用'live'而不是'on' – Bot 2012-02-21 23:56:47

+0

這是來自'.delegate()'的文檔:從jQuery 1.7開始,.delegate()已經取代.on()方法。然而,對於較早的版本,它仍然是使用事件委託的最有效方法。「因此,如果您使用的是jQuery 1.4.2或更新的版本,那麼jQuery團隊建議使用'.delegate()'。 – Jasper 2012-02-21 23:58:06

1

大家你的腳本,但我不認爲任何人都會停下來認爲他們應該幫助改善腳本。 「或者如果這是解決這個問題的正確方法」,答案是否定的。也許我是過度簡化了,但如果你想要使用JQM(或者任何DOM元素)打開一個新頁面,只需在它周圍包裹一個錨標籤(或者在其中,以適合的方式) ),並設置您的href到href="#myNewPage"和要加載到id="myNewPage"

jQuery Mobile的的工作框架設置爲自動注入JS & AJAX到正常的HTML元素,以提供平滑的UX上的JQM頁面上的ID。雖然綁定觸摸事件是需要的,但這種情況並不能保證代碼的水平......這就是jQuery Mobile =的美妙之處)。當觸摸事件綁定

例子:顯示/隱藏DOM對象,觸發一個插件等點擊

+0

他不想鏈接到新的jqm頁面,他想將它綁定到一個函數。 – netalex 2014-05-08 20:48:04

相關問題