9

jquery mobile と backbone を使用した小さな phonegap アプリケーションがあります。.popup() メソッドを手動で呼び出して、ユーザーにポップアップを表示しようとしています。

iOSではすべて正常に動作しますが、Androidでは奇妙な問題が発生しました.ポップアップがしばらく表示されてから消えます.

実際のコードは次のとおりです。

var PostView = Backbone.View.extend({
  events: {
    'touchend .add-comment-button': 'addComment'
  },
  addComment: function() {

    this.$(".comment-popup").popup('open', { history: false });

    return false; // Stop bubbling.
  }
});

history: false を使用しています。これは、このポップアップが実際にはサブページの一部であるためです。コードは非常に単純に見えますが、なぜ消えてしまうのか、なぜこれが Android デバイスでのみ起こるのか理解できません。

ありがとう、そして私の悪い英語でごめんなさい。

4

7 に答える 7

4

この問題を解決するために何時間も費やしました。

最後に、問題を解決したように見える次の2つのことを実行しました。

1 - 圧縮されていない jqm ファイルを使用します。つまり、jquery.mobile.1.2.0.js

2-「タップ」オプションを使用してプログラムでポップアップをトリガーしていました-「クリック」オプションに変更すると、機能しました。

$('.option').live('click', function() {
    $('#popup-div').popup('open');
}); 
于 2013-01-08T17:24:58.620 に答える
3

この問題を解決するために何時間も費やしました。

最後に、問題を解決したように見える次の2つのことを実行しました。

このコードスニペットはあなたを助けるかもしれません->

$('#testBtn').on('tap',function(e){
   console.log("button clicked");
   e.preventDefault();
   $('#testPOPUP').popup("open");
});

私が使用したことに注意してくださいe.perventDefault().

于 2014-03-06T09:59:08.243 に答える
1

それを「修正」する1つの方法はdata-history="false"、ポップアップdivに設定することです

この質問も参照してください

history=false の JQuery Mobile ポップアップが自動的に閉じる

于 2014-05-08T00:21:33.477 に答える
0

それが誰かを助ける場合に備えて、私はBing MapsでMicrosoft.Maps.Events.addHandler(pin, 'click', callback)メソッドを使用して同じ問題を抱えていました.

特に良いことではありませんが、代わりに ID を保存pushpin._idし、次のことを行いました。

$("#page").on('vclick', function (event) {
    if (event.target.parentElement.className === "MapPushpinBase") {
        $("#stopPopup").popup('open');
    }
});
于 2013-02-26T17:14:59.027 に答える
0

Android 2.3 デバイス (ネイティブ ブラウザーと Firefox の両方) で popup('open') を使用しようとすると、まったく同じ問題が発生し、他のデバイスのブラウザーでも問題なく動作します。また、ポップアップを開くためにバックボーンイベント管理を使用しています(タップイベントを使用し、ポップアップに追加オプションはありません)。

問題を「修正」するために私がしたことは、このイベントのバックボーン イベント管理を削除し、レンダリング機能にリスナーを追加したことです。あなたの場合、これは次のようになります。

    events: {
       // 'touchend .add-comment-button': 'addComment'
    },
    render: function() {
            $(this.el).html(this.template(this.model));
            $(this.el).find('.add-comment-button').tap(function(el){
                this.addComment(el);
                return false;
            }.bind(this));
    }

問題の原因 (バックボーンと jquery モバイルの間の非互換性に違いない) と、Android でのみ表示される理由はわかりませんが、現時点では、この回避策により、私のアプリはどのデバイスでも正常に動作するようです。

編集:おっと、私の場合、問題は「return false;」が欠落していたことが判明しました。イベントを扱う関数で。これを追加したので、バックボーン イベント管理で正しく動作します。悲しいことに、なぜあなたが問題を抱えているのか、そしてなぜ私がアンドロイドでしか見られなかったのかを説明していません.

于 2012-10-12T16:17:17.437 に答える
0

強引なオプションの 1 つは、ポップアップが非表示になっているかどうかを確認してから再度開くことです。

ループでは、ポップアップが非表示になる正確な時間はさまざまなようです。

var hidden = $('#' + id + '-popup') .hasClass ('ui-popup-hidden')
if (hidden) $('#' + id) .popup ('open')

実際の例: http://jsfiddle.net/ArtemGr/hgbdv9s7/

別のオプションは、次のようにバインドすることpopupaftercloseです。

var reopener = function() {$('#' + id) .popup ('open')}
$('#' + id) .on ('popupafterclose', reopener)
$('#' + id) .popup ('open')

ここのように: http://jsfiddle.net/ArtemGr/gmpczrdm/

しかし、何らかの理由で、popupaftercloseiPhone 4 では半分の時間でバインドが起動しません。

于 2015-01-02T10:35:00.653 に答える