2012-02-21 45 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

相关问题