Javascript JQueryMobile按钮和单击

Javascript JQueryMobile按钮和单击,javascript,jquery,jquery-mobile,button,Javascript,Jquery,Jquery Mobile,Button,在JQueryMobile中,将click/vclick事件绑定到按钮的正确方法是什么 我尝试过使用$().bind(“单击”,function(){})和$()。在(“单击”,function(){})上但我从未从控制台得到响应 我在index.html中的按钮设置如下: 编辑 <div data-role="page" data-title="OneStop Mobile" class="ui-responsive-panel" id="homepage">

在JQueryMobile中,将click/vclick事件绑定到按钮的正确方法是什么

我尝试过使用
$().bind(“单击”,function(){})
$()。在(“单击”,function(){})上但我从未从控制台得到响应

我在index.html中的按钮设置如下:

编辑

 <div data-role="page" data-title="OneStop Mobile" class="ui-responsive-panel" id="homepage">        
    <div data-role="panel" data-dismissable="false" id="optionsPanel">
        <div>
            <ul data-role="listview">
                <li> <a href="#" id="store">store</a>         </li>     
                <li> <a href="#" id="download">Download</a>   </li>
                <li> <a href="#" id="check">Check</a>         </li>
                <li> <a href="#" id="clear">Clear</a>         </li>
            <ul>      
        </div>
    </div>
</div>

根据JQMobile api和演示页面,这应该是可行的,但我从来没有在我的设备或浏览器上看到任何事情发生。

您的问题是,在绑定事件时,您绑定到的元素还不是
DOM的一部分

您需要通过在
ready
事件或JQM页面的中调用函数来确保绑定事件时元素已经是
DOM
的一部分,或者可以通过调用重载版本的.on函数来使用事件委派

比如说

pageinit
事件期间进行绑定(这实际上也使用事件委派来绑定
pageinit
事件)

与事件委派一起使用

$(document).on('click', '#store', function() {
 console.log('This should Work!');
});
请注意,事件委派的工作方式是将事件绑定到现有的更高级别元素,然后在事件冒泡时检查选择器。一般来说,您实际上希望将事件绑定到尽可能靠近您检查的元素的位置,但是如果需要,您可以一直绑定到文档

作为一个旁注,使用我提供的第一种方法也可以。但是,从jQuery 1.7开始。只将委托绑定到。这是首选的(
.bind
保留为向后兼容)


你能提供你的html代码吗?这个存储是静态的还是生成的?这取决于你把JS文件/代码放在哪里。JS代码在一个名为JS的文件夹www/JS/index.JS中,这部分工作正常。按钮是静态的。@Omar它是静态的,但它只是委托给
.on
,并且根据jQuery。on是首选的。bind实际上只为向后兼容而保留。但是,既然您提到了它,我将把它合并到我的回答中,使之更清楚。@Omar能否请您解释一下这个jqm“我们建议绑定到这个事件而不是DOM ready(),因为无论是直接加载页面还是将内容作为Ajax导航系统的一部分拉到另一个页面,这都会起作用。”@Omar公平地说,在这个特殊情况下,
ready()
也可以工作,但您是对的,
pageinit
是首选,这就是为什么我在回答中没有将其作为示例的原因。@Jack
.ready()
肯定会工作,但它的“功能不适合jQM,因为它使用Ajax导航”。@Omar True,出于某种原因,我认为这是一个单页应用程序,按钮是唯一动态添加的东西,但页面是DOM的一部分(我意识到OP的问题中没有任何东西表明任何一种方式…)。
//passing in the selector as the second parameter calls the overloaded version of .on
$(document).on('pageinit', '#myStorePage', function() {
   $("#store").bind("click", function(event, ui) {
      console.log("This should Work!")
   });
});
$(document).on('click', '#store', function() {
 console.log('This should Work!');
});
$(document).on('click','#store', function(event) {
    alert("WORK DAMNIT!")
});