0

そこで、Jquery Mobile で 30 秒間カウントダウンするページを設定しようとしています。次の機能が必要です。

(1) pageshow でカウントダウンを開始します (2) カウントダウンが切れると、新しいページにリダイレクトします (3) カウントダウンが切れる前にユーザーがクリックして離れた場合 (pagehide)、タイマー関数を終了してカウントをリセットします。

だからここに私の試みがあります。の下にコードを配置しました<div data-role="page" id="pay">

<script>
            $("#pay").live("pageshow",function(){
            alert("show!");
            var sec = 10;
            var timer = setInterval(function() { 
               $('#seconds').text(sec--);
               if (sec == 5) { alert("5 seconds mark")};
               if (sec == -1) {
                  document.location = "cuentas";
                  clearInterval(timer);
               } 
            }, 1000);
            });

            $("#pay").live("pagehide",function(){
                alert("hide!");
                clearInterval(timer);
                var sec = 10;

            });

</script>

「ショー!」を取得します。アラート。「5 秒マーク」アラートが表示されます。そして、私は「隠す!」を取得します。カウントダウンが切れる前にページを切り替えると警告します。しかし、ページを離れると (たとえば 8 秒)、メニュー バーがフリーズし、他のページに移動できなくなり、5 秒のアラートが表示されます。インターバル機能が終了しませんでした...何が問題なのかわかりません。

追記 ---

$("#pay").live("pagehide",function(){
               clearInterval(timer);
                var sec = 10;
                alert("hide!");

            });

これを行うと、アラートが表示されません.....

私は試しましreturn false;return;、、break;。ページ非表示でその間隔のカウントダウン機能を停止する方法はありますか?

4

1 に答える 1

1

jQueryのドキュメントから:

jQuery 1.7 以降、.live() メソッドは非推奨になりました。.on() を使用して、イベント ハンドラーをアタッチします。古いバージョンの jQuery のユーザーは、.live() よりも .delegate() を使用する必要があります。

それに加えて、タイマー変数は pageshow で呼び出された関数に対してローカルであるように見えます

$("#pay").live("pageshow",function(){
        var timer = setInterval(function() {

pagehide で呼び出される関数から clearInterval に渡すには、それを引き出す必要があると思います

また、おそらく無関係ですが、オフになっているセミコロンがあります。

if (sec == 5) { alert("5 seconds mark")};

する必要があります

if (sec == 5) { alert("5 seconds mark");}
于 2012-12-12T18:36:21.583 に答える