Jquery mobile jQuery移动事件处理程序不总是工作

Jquery mobile jQuery移动事件处理程序不总是工作,jquery-mobile,jquery,Jquery Mobile,Jquery,我有一个事件处理程序,它应该在selectbox(id=“save login”)的值更改后调用。选择框显示为滑块,因此我使用“slidestop”事件。该页面有一个登录按钮,可将公式提交到同一URL位置。提交表单后,将再次显示相同的页面 不幸的是,在第一次提交之后,当selectbox值更改时,将不再调用事件处理程序。如果我再次提交表单,处理程序通常会再次工作 这是我的页面代码和用于绑定事件处理程序的脚本: <!DOCTYPE HTML> <HTML> <

我有一个事件处理程序,它应该在selectbox(id=“save login”)的值更改后调用。选择框显示为滑块,因此我使用“slidestop”事件。该页面有一个登录按钮,可将公式提交到同一URL位置。提交表单后,将再次显示相同的页面

不幸的是,在第一次提交之后,当selectbox值更改时,将不再调用事件处理程序。如果我再次提交表单,处理程序通常会再次工作

这是我的页面代码和用于绑定事件处理程序的脚本:

<!DOCTYPE HTML>
<HTML>
    <head>      
        <link rel="stylesheet" href="jquery.mobile.structure-1.0.1.CSS" />
        <link rel="stylesheet" href="jquery.mobile-1.3.0.CSS" />

        <script src="js/jquery-1.9.1.min.js"></script>
        <script src="js/jquery.mobile-1.3.0.min.js"></script>
    </head>
    <body>
        <div data-role="page" id="login" data-theme="c">        
            <div data-role="content">
                <div id="loginform">
                    <form action="login_test.html" method="post" data-transition="flip">
                        <ul data-role="listview" data-inset="true" data-theme="c">
                            <li>
                                <label for="save-login">Login-Informationen speichern</label>
                                <select name="save-login" id="save-login" data-role="slider">
                                    <option value="0">Nein</option>
                                    <option value="1">Ja</option>
                                </select>                       
                            </li>
                        </ul>           
                        <input type="submit" value="Login" data-role="button">
                    </form>
                </div>
            </div>

        <script type="text/javascript">
        $(":jqmData(role='page')").on("pageshow", function(event) {
            var selectbox = $("#save-login");
            selectbox.on("slidestop", function(event, ui) {
                if (this.value == "1") {
                    alert("Autologin enabled");
                }
            });
        });
        </script>           

        </div>
    </body>
</HTML>

  • Speichen登录信息 不 青年成就
$(“:jqmData(role='page')”)。在(“pageshow”上,函数(事件){ var selectbox=$(“#保存登录名”); selectbox.on(“slidestop”,函数(事件,用户界面){ 如果(this.value==“1”){ 警报(“自动登录启用”); } }); });

有人知道是什么导致事件处理程序无法正常工作吗?

将代码更改为:

$(document).off("pageshow", ":jqmData(role='page')").on("pageshow", ":jqmData(role='page')" ,function(event) {
    $(document).on("slidestop", "#save-login",function(event, ui) {
        if (this.value == "1") {
            alert("Autologin enabled");
        }
    });
});

为什么要将其绑定到
pageshow
?删除它,因为它只会触发一次
pageshow
事件。每次加载页面时都会触发pageshow事件。这似乎像预期的那样工作,甚至可以找到selectbox对象并添加处理程序。谢谢提示!将事件处理程序与“on”和选择器参数绑定成功。我只是好奇为什么没有选择器元素它就不能工作。但是,好吧……因为您每次返回页面时都在使用pageshow,您再次绑定了单击事件。这就是为什么我在再次应用click事件之前使用off来删除它。第二次单击事件总是否定第一次单击。基本上,当您可以始终使用委托事件查找时,您将事件绑定到文档,它将找到更正元素的方法。您编写了“第二次单击事件始终否定第一次单击事件”,这是什么意思?这是“on”方法的特殊行为吗?我在文档中找不到任何东西……这是jQuery Mobile的一种特殊行为。我还有另外一个答案,我在其中描述了这个问题:搜索主题:阻止多事件绑定/triggeringSo使用“否定”您的意思是在元素中添加了另一个单击处理程序?这也是我认为它会做的。但是当触发selectbox更改时,alertbox应该会弹出好几次,但它没有。