-2

各ページに 10 個の製品を表示する製品ページがあります。

GET変数は結果の&perpage=10量を変更します。<select>さまざまな量の結果を選択するドロップダウンを作成しました。

この選択ボックスが変更されるたびに、現在のURL&perpage=NEWVALUEに追加する必要があります。

どうすればこれを達成できますか?

4

6 に答える 6

2

現在の URLを変更する唯一の方法は、ハッシュタグ ( #) とwindow.history.replaceStateを使用することです。どちらも実際にはページをリロードしません。これらのメソッド、リッスンできる変更イベントをディスパッチし、ajax を使用してバックエンド スクリプトを再クエリして結果を取得しますが、これは実際に必要なものよりも少し多い場合があります。

おそらくやりたいことは、(選択メニューを使用して) フォームを現在のページに再送信することです。何かのようなもの:

<form action="" method="GET">
    <select name="perpage" onchange="this.form.submit()">
        <option value="10">10</option>
        <option value="25">25</option>
        <option value="50">50</option>
    </select>
</form>
于 2012-08-27T16:54:48.337 に答える
0

サーバー側でこれを行う方法を尋ねていると仮定すると(質問には記載されていません)、必要なことを行う1つの方法を次に示します。

$parts = parse_url($url); # parse the URL into its component parts
if (isset($parts['query'])) {
    parse_str($parts['query'], $qs); # split query string into parts
} else {
    $qs = array();
}
$qs['perpage'] = $NEWVALUE; # add param to array
$parts['query'] = http_build_query($qs); # build query string from array

# then, using `unparse_url()` from 
# http://www.php.net/manual/en/function.parse-url.php#106731
# you rebuild the URL:

$url = unparse_url($parts);

# For reference, here's `unparse_url()`:

function unparse_url($parsed_url) { 
  $scheme   = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
  $host     = isset($parsed_url['host']) ? $parsed_url['host'] : ''; 
  $port     = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : ''; 
  $user     = isset($parsed_url['user']) ? $parsed_url['user'] : ''; 
  $pass     = isset($parsed_url['pass']) ? ':' . $parsed_url['pass']  : ''; 
  $pass     = ($user || $pass) ? "$pass@" : ''; 
  $path     = isset($parsed_url['path']) ? $parsed_url['path'] : ''; 
  $query    = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : ''; 
  $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
   return "$scheme$user$pass$host$port$path$query$fragment"; 
} 

http://www.php.net/manual/en/function.parse-url.php#106731を参照してください。

于 2012-08-27T17:00:14.650 に答える
0

まあ、 (値からlocation.href += "&perpage="+newvalue適切に定義された)だけでうまくいきますが、しばらくすると次のようなものが得られますnewvalue<select>

http://example.com/products.php?perpage=10&perpage=20&perpage=50&perpage=10&perpage=5&perpage=20&................

したがって、次のようなことを実際に行う必要があります。

location.href = location.href.replace(/([?&])perpage=\d+/,"$1perpage="+newvalue);
于 2012-08-27T16:53:44.730 に答える
0
window.location.href="?perpage=NEWVALUE"

これにより、クエリ文字列が現在の場所に追加され、ウィンドウがそこに移動します

于 2012-08-27T16:53:47.083 に答える
0

PHP、JavaScript では?

<form method="get">
    <select name="perpage">
        <option value="10">10</option>
        <option value="20">20</option>
        <option value="30">30</option>
    </select>
</form>

このGETメソッドを使用すると、perpage値が URL に送信され、ページがリロードされます (action="someurl"別のページに移動する場合は設定してください)。

于 2012-08-27T16:54:17.167 に答える
0

ページをリロードせずに説明したように URL を変更することはできません。(ページをリロードしたくない場合)

jquery: リダイレクトせずに URL アドレスを変更しますか?を参照してください。より完全な説明と、ハッシュで同様のことを行う方法については。

于 2012-08-27T16:54:40.207 に答える