0

私が達成したいのは、div内にいくつかのボタンがあるページです。ユーザーがこれらのボタンの1つを押すと、ダイアログが開き、フォローアップの質問をします。この後、ユーザーは同じページに戻りますが、ボタンのあるdivは非表示になります。

私が試したのは次のとおりです。JQMページ内に、ボタンを含むボタンと呼ばれるdivがあります(論理的に)。これによりダイアログが開き、どのボタンが押されたかをローカルストレージに保存する関数も呼び出されます。次に、ダイアログが開き、実際にデータがサーバーに送信されます。

何らかの理由で、ダイアログから戻ったときにdivが非表示になることはありません。変数をsessionStorageに保存し、pageloadでdivを非表示にしようとしましたが、ダイアログから戻ったときにページロードイベントが発生しないようです。何か提案がありますか、それとも基本的なものが欠けていますか?

<div class="ui-grid-b" id="buttons">
    <div class="ui-block-a"><a  href="#Popup" data-rel="dialog" onclick="savePushedButton('green')"></a></div>
    <div class="ui-block-b"><a  href="#Popup" data-rel="dialog" onclick="savePushedButton('yellow')"></a></div>
    <div class="ui-block-c"><a  href="#Popup" data-rel="dialog" onclick="savePushedButton('red')"></a></div>
</div><!-- /grid-b -->

// the dialog: 
<div data-role="dialog" id="Popup" data-overlay-theme="b" data-theme="a" class="ui-corner-all">
        <form>
            <div style="padding:10px 20px;">
              <h3>Heading</h3>
              <textarea name="comments" id="popuptextarea"></textarea>
              <button type="submit" data-theme="b" onClick="save()">Selv&auml;</button>
            </div>
        </form>
</div>

データを保存し、divを非表示にする2つのJavaScript関数があります。

function savePushedButton(color) {
    //save which button was pressed to local storage
    $('#buttons').hide();
    console.log("asd");

}
function save() {
//send data to server
}
4

1 に答える 1

0

onclickはあなたの問題です ( onchangeも)。jQuery Mobile では使用しないでください。jQuery Mobile は、 onclickがトリガーされる前に、ダイアログへの移行を既に開始しています。ダイアログへの遷移が発生する前に、手動でクリック イベントをボタンにバインドし、ボタンを非表示にする必要があります。

これが実際の例です: http://jsfiddle.net/Gajotres/uhsfs/

$(document).on('pagebeforeshow', '#index', function(){       
    $(document).on('click', '#test-button', function(){     
        $('#buttons').hide();
        savePushedButton($(this).attr('data-color'));
    });
});

function savePushedButton(color) {
    console.log(color);
    $.mobile.changePage('#Popup', {transition: 'pop', role: 'dialog'}); 
}
于 2013-02-12T13:12:24.413 に答える