0

目標: 誰かがドロップダウンリストからオプションを選択するたびに、そのオプションがすでに選択されている場合でも、href値をロードすること。

問題:以下 のコードは機能しますが、いくつかのオプションがすでに選択されている(クリックされている)場合は機能しません。たとえば、「価格別」オプションをクリックしたとします。新しいページが読み込まれ(細かい)、オプション[価格別]がデフォルトで選択され、[名前別]オプションの上のリストの一番上に表示されます。

今度はオプション「価格別」をもう一度選択したいのですが、ページの読み込みが機能しません

HTML:

<select name="" class="inputbox" size="1" onchange="window.top.location.href=this.options[this.selectedIndex].value">
    <option value="/index.php/by,product_name">By name</option>
    <option value="/index.php/by,mf_name">By MF</option>
    <option value="/index.php/by,product_price">By price</option>
    <option value="/index.php/by,product_special">By type</option>
</select>
4

5 に答える 5

0
  • メソッドをonfocusにバインドし、選択を保存して選択を削除します
  • その後、onchangeは常にトリガーされます。そこで、(元の保存された選択を使用しても)好きなことを行うことができます
于 2013-01-12T19:58:28.727 に答える
0

選択ボックスに空のオプションを追加します。すでに選択されているものを選択する場合は、最初にこの空のオプションを選択してから、目的のオプションを選択します。そうすればうまくいくでしょう。

<select name="" class="inputbox" size="1" onchange="if(this.options[this.selectedIndex].value) window.top.location.href=this.options[this.selectedIndex].value">
    <option value="">---</option>
    <option value="/index.php/by,product_name">By name</option>
    <option value="/index.php/by,mf_name">By MF</option>
    <option value="/index.php/by,product_price">By price</option>
    <option value="/index.php/by,product_special">By type</option>
</select>
于 2013-01-12T19:43:16.360 に答える
0
$('select').blur(function(){
    window.location = $('option:selected', this).val();
});

ぼかしは常に希望する方法でキャプチャされます。

動作中のjsFiddle...

于 2013-01-12T19:43:23.100 に答える
0

このようなワークフローを作成するべきではありません。すべてのブラウザで維持するのが難しいだけでなく、キーボードアクセシビリティ(WCAG)も難しいため、「onchange」にバインドする場合は、キーボードユーザーが押し上げるのを気にする必要はありません。そして、そのことに焦点が当てられたときにダウンします。

フォーカスを失うときにバインドするとどうなりますか(onblur)?

于 2013-01-12T19:46:59.267 に答える
0

とにかく新しいページをロードしているので、選択したインデックスをリセットします

onchange="var val=this.options[this.selectedIndex].value;
this.selectedIndex=0;
window.top.location.href=val">
于 2013-01-12T20:06:33.660 に答える