1

私はこのようなJavaScriptを使用していました...

<select onchange="document.langForm.submit();" ... >

しかし、私がjquerymobileを使い始めたとき、それは壊れました。

この問題は以前に 100 回発生したことを知っています。しかし、以前のケースへのハイパーリンクはここでは役に立たない. 真剣に。私は完全に混乱しています。

一方で、私が抱えている頭痛を示すために、本当に、本当に簡単な例を作る時間を作りました。したがって、誰かがこれらの 2 つのページを修正する方法を正確に教えてくれれば、非常にありがたいです。

http://activemetrics.ch/test/en.html

http://activemetrics.ch/test/de.html

これらのいずれかをブラウザーにロードしてから、選択リストの選択を変更することで他のページに切り替えることができることに注意してください。ただし、2 番目のページに到達した後は、同様のアクションを使用して最初のページに戻ることはできません。

はい、これはajaxに関係しています。私はそれを知っています。しかし、ユーザーが 2 つのページを簡単に切り替えることができるように、この 2 つのページの問題を解決するための最良の方法は何ですか?

すべての提案を歓迎します。

私のためにこれを考えて脳波の一部を費やしている人に感謝します!

-jd

4

1 に答える 1

1

説明 :

この状況を理解するには、jQuery Mobile仕組みを理解する必要があります。ajax を使用して他のページをロードします。

最初のページは正常に読み込まれます。そのHEADBODYは にロードされ、DOM他のコンテンツを待つためにそこにいます。2 番目のページが読み込まれると、そのBODYコンテンツのみが に読み込まれますDOM

私があなたの答えに持っていることから、あなたはこれを理解していますが、あなたは間違いを犯しました. 2 つの html ファイルがあります: en.htmlandですde.htmlが、それらの名前はそれほど重要ではありません。重要なのは、ページ ID または id のdata-role="page"div 属性です。あなたの場合、同じ div と同じ選択 ID を持つ 2 つのページがあります。どちらもDOMイベント バインディングに読み込まれるため、常に最初に読み込まれたページに移動します。

必要なのは、ページと選択ボックスに一意の ID を使用することです。

作業例:

ja.html

<!DOCTYPE html> 
<html> 
    <head> 
        <title>My Page</title> 
        <meta name="viewport" content="width=device-width, initial-scale=1"/> 
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.css" />
        <script                 src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
        <script                 src="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.js"></script>
    </head> 
    <body>      
        <div data-role="page" id="sbePage1">
            <h3>this is english</h3>      
            <form name="langForm" id="langForm" action="BookNow.asp?" method="get" style="margin-top:0px auto">
                <select data-inline="true" name="lang" id="langId" data-native-menu="false" >
                    <option value="1972" SELECTED>Something Already Selected</option>
                    <option value="1973">Some Sort of Change</option>
                </select>
            </form> 
            <script>
                $(document).on('pageinit', '#sbePage1' ,function () {   
                    $(document).off('change', '#langId').on('change', '#langId',function (event) {          
                        $.mobile.changePage('de.html', {
                            type: 'get',
                            data: ''
                        });
                    });
                });   
            </script>           
        </div><!-- /page -->      
    </body>
</html>

de.html

<!DOCTYPE html> 
<html> 
    <head> 
        <title>My Page</title> 
        <meta name="viewport" content="width=device-width, initial-scale=1"/> 
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.css" />
        <script                 src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
        <script                 src="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.js"></script>
    </head> 
    <body>       
        <div data-role="page" id="sbePage2">
            <h3>this is german</h3>      
            <form name="langForm2" id="langForm2" action="BookNow.asp?" method="get" style="margin-top:0px auto">
                <select data-inline="true" name="lang" id="langId2" data-native-menu="false" >
                    <option value="1972" SELECTED>Something Already Selected</option>
                    <option value="1973">Something Else</option>
                </select>
            </form> 
            <script>
                $(document).on('pageinit', '#sbePage2' ,function () {
                    $(document).off('change', '#langId2').on('change', '#langId2',function (event) {            
                        $.mobile.changePage('en.html', {
                            type: 'get',
                            data: ''
                        });
                    });
                });             
            </script>
        </div><!-- /page -->     
    </body>
</html>

編集 :

あなたの願いは理解できますが、それは不可能だと言わざるを得ません。現在の例では、jQuery Mobile で同じ ID を持つ 2 つのページを持つことはできません。考えてみてください。同じ ID を持つ 2 つのページが DOM に読み込まれます。ページDIVにアクセスしようとするたびに、最初のページが最初にあるため、常に最初のページにアクセスします。

多言語ページを作成する場合、複数の html ページは必要ありません。優れた jQuery 多言語プラグインを探してください。

一方、ajax をオフにすると、必要なことを行うことができますが、アニメーション化されたトランジションが失われます。

ajax を使用しないが、ページの ID が同じである例

en.html:

<!DOCTYPE html> 
<html> 
<head> 
    <title>My Page</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.css" />
    <script                 src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
    <script language="text/javascript">
          $(document).bind("mobileinit", function () {
                $.mobile.ajaxEnabled = false;
          });
    </script>   
    <script                 src="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.js"></script>
</head> 
<body> 

<div data-role="page" id="sbePage1en">
<h3>this is english</h3>      
            <form name="langFormEn" id="langFormEn" action="BookNow.asp?" method=get style="margin-top:0px auto">
                <select data-inline="true" name="lang" id="langId" data-native-menu="false" >
                    <option value="1972" SELECTED>Something Already Selected</option>
                    <option value="1973">Some Sort of Change</option>
                </select></form> 
            <script>
                $("#sbePage1en").live('pageshow', function () {
                    $('#langFormEn').bind('change', function (event) {
                        $.mobile.changePage('de.html', {
                            type: 'get',
                            data: ''
                        });
                    });
                });
            </script>               
</div><!-- /page -->
</body>
</html>

de.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>My Page</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.css" />
    <script                 src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
    <script language="text/javascript">
          $(document).bind("mobileinit", function () {
                $.mobile.ajaxEnabled = false;
          });
    </script>       
    <script                 src="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.js"></script>
</head> 
<body> 

<div data-role="page" id="sbePage1de">
<h3>this is german</h3>      
            <form name="langFormDe" id="langFormDe" action="BookNow.asp?" method=get style="margin-top:0px auto">
                <select data-inline="true" name="lang" id="langId" data-native-menu="false" >
                    <option value="1972" SELECTED>Something Already Selected</option>
                    <option value="1973">Something Else</option>
                </select></form> 
<script>
    $("#sbePage1de").live('pageshow', function () {
        $('#langFormDe').bind('change', function (event) {
            $.mobile.changePage('en.html', {
                type: 'get',
                data: ''
            });
        });
    });
</script>               
</div><!-- /page -->
</body>
</html>
于 2013-05-24T20:12:34.780 に答える