0

これを修正する簡単な方法が見つからないようですか?Google の Fast Buttonsアプローチについて頭を悩ませることはできません。したがって、誰かが代替手段を持っている場合、それは本当に素晴らしいことです.

私が話しているゴーストクリックは、ボタンまたはそれを複数回トリガーする何かへのタッチを指していますたとえば、表示alert("hello");されるボタンをクリックすると、その警告ボックスが 2 回または場合によっては 5 回表示されます。

これは、ボタンの押下を処理するコードの一部です。一部省略していますが、基本的には「追加」ボタンの押下を処理する仕組みです。

$('div:jqmData(role="page")').live('pagebeforeshow',function(){
    var db = window.openDatabase("mydb", "1.0", "MyDB", 1000000);

    var url = window.location.href;
    var filename = url.substring(url.lastIndexOf('/')+1);

    switch (filename) {
        case "index.html":
            $("#add").tap(function(e){
                if ($("#info").val() == "") {
                    navigator.notification.alert("The info cannot be blank!", function(){}, "Error", "Okay, got it!");
                } else {
                    db.transaction(addToDb, errorCB, addedToDb);
                }
            });
            break;
        case "sample.html":
            break;
    }
});
4

1 に答える 1

1

委任されたイベント バインディングの内部で、標準のイベント バインディングが発生しています。つまり、outer-event が発生するたびに inner-binding がバインドされます。

したがって、基本的には、疑似ページが発生するtapたびにイベント ハンドラーを再バインドしています。pagebeforeshow別のページに移動するたびに、別の内部バインディングが作成されるため、複数のアラートが発生します。

適切な修正は、pageinitページ イベントの委任されたイベント ハンドラーを作成し、そのイベント ハンドラーで内部バインディングを行うことです。イベントはpageinit疑似ページごとに 1 回だけ発生するため、不必要にイベント ハンドラーを追加し続けることはありません。

例えば:

$(document).on('pageinit', '.ui-page',function(){
    var db       = window.openDatabase("mydb", "1.0", "MyDB", 1000000),
        url      = window.location.href,
        filename = url.substring(url.lastIndexOf('/')+1);

    switch (filename) {
        case "index.html":
            $("#add").tap(function(e){
                if ($("#info").val() == "") {
                    navigator.notification.alert("The info cannot be blank!", function(){}, "Error", "Okay, got it!");
                } else {
                    db.transaction(addToDb, errorCB, addedToDb);
                }
            });
            break;
        case "sample.html":
            break;
    }
});

.on()depreciated の代わりに、委任されたイベント ハンドラーにを使用したことに気付くでしょう.live()

于 2012-10-10T18:31:50.700 に答える