11

私は jQuery Mobile を使用しており、1 つの HTML ページにいくつかのページがあります。これらのページを開くときに、パラメーターを渡して、パラメーターが URL で永続化されるようにしたいと考えています。

例えば

  <a href="#map?x=4&y=2"

それが開き、beforeshow イベントでパラメータ X と Y にアクセスできました。

これは可能ですか?ハッシュバングでパラメーターをエンコードするために提案する代替手段は何ですか?

4

3 に答える 3

7

現在のサポートにはバグがあるため、ハッシュ「パラメーター」を使用しないことをお勧めします。

すべてのリンクのクリックを傍受し、特定のデータ要素、たとえば data-params を探します。

    $('a').live('click',
        function(e) {
            var data = $(e.target).jqmData()
            globalParams = data.params !== null ? data.params : null
        }
    )

そしてあなたのHTMLであなたは行くことができます

<a href="#map" data-params="x=4&y=2">....</a>

この場合、paramsと呼ばれるグローバル変数を作成しています。これは、すべてのコードから統一された方法でアクセスできるはずです。

ただし、これらのパラメーターを自分で解析する必要がありますが、それは難しくありません。次のようなものを使用できます。

function getCurrentParams() {

    if (!params) {
        return null
    }

    var res = {}
    $(params.split('&')).each(
        function(i, e) {
            var pair = e.split('=')
            if (pair.length !== 2) {
                return
            }
            res[pair[0]] = pair[1]
        }
    )

    return res
}
于 2011-07-11T05:34:08.567 に答える
4

はい、あなたはあなたが示したようなリンクを持つことができます:

<a href="#map?x=4&y=2"> Click here </a>

次に、ショーの前に、次のコードでこのパラメーターを読み取ることができます。

var params = QueryStringToHash(location.hash.substr(1));
//Now you can use params.x, params.y, etc

(ここQueryStringToHashから得た)の定義は次のとおりです。

var QueryStringToHash = function QueryStringToHash  (query) {
  var query_string = {};
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    pair[0] = decodeURIComponent(pair[0]);
    pair[1] = decodeURIComponent(pair[1]);
        // If first entry with this name
    if (typeof query_string[pair[0]] === "undefined") {
      query_string[pair[0]] = pair[1];
        // If second entry with this name
    } else if (typeof query_string[pair[0]] === "string") {
      var arr = [ query_string[pair[0]], pair[1] ];
      query_string[pair[0]] = arr;
        // If third or later entry with this name
    } else {
      query_string[pair[0]].push(pair[1]);
    }
  } 
  return query_string;
};

お役に立てれば。乾杯

于 2011-07-08T20:09:03.953 に答える
0

jQuery モバイル FAQ を確認しましたか? -> http://jquerymobile.com/test/docs/faq/pass-query-params-to-page.php

私は現在使用しています: https://github.com/azicchetti/jquerymobile-router

于 2013-02-18T05:01:24.453 に答える