Your jsfiddleは少しあいまいです - そこに2つのコンボボックス一つだけ明確なリンクがあるので、リンクはただ一方または両方のコンボボックスをクリアすることになっているかどうかは明らかではありません。
実際のところ、各コンボボックスには明確なリンクがあると思われます。あなたの明確なリンクのための右のテキストボックスを選択することはすべてあなたのhtmlに依存します。明確なリンクがあなたの<select>
要素の次の兄弟であるところの一つの簡単なケースは、次のようになります。
<select class="combo">
...
</select>
<a href="#" class="clearCombo">Clear</a>
次にあなたがクラスを使用して、1回のコールでコンボを作成することができます。次に、クリアクリックハンドラを一度に作成します。ハンドラは、.prevAll(".ui-autocomplete-input")
を使用して関連するテキストボックスを検索します。
$("select.combo").combobox();
$("a.clearCombo").click(function() {
$(this).prevAll('.ui-autocomplete-input').first()
.focus()
.val('')
.autocomplete('close');
return false;
});
Working demo at jsfiddle
あなたのリンクがあなたのコンボボックスの兄弟ではない場合、それは大丈夫です。兄弟である親を見つけて、上記の方法を使用してください。または、それがうまくいかない場合は、コンボとリンクの共通の親を見つけてください。
<span class="comboContainer">
<span>
<select class="combo">
...
</select>
</span>
<a href="#" class="clearCombo">Clear</a>
</span>
あなたは
.closest(".comboContainer")
使用
と.find(".ui-autocomplete-input")
:これらの技術について
$("select.combo").combobox();
$("a.clearCombo").click(function() {
$(this).closest(".comboContainer").find('.ui-autocomplete-input')
.focus()
.val('')
.autocomplete('close');
return false;
});
Working demo at jsfiddle
いいところがリンクということである共通の親が一つだけのコンボと一つのリンクが含まれている場合にのみ動作します関連するコンボボックスのIDを知る必要はありません。私たちはhtmlから推論することができます。これにより、コンボを移動したり、新しいコンボを追加したりすることが非常に簡単になります。
つの提案:
- あなたのプラグインに明確なメソッドを追加します。あなたのウィジェットのユーザーは、内部の仕組みを知っている必要はありません。あなたの例では、ウィジェットが
.autocomplete()
を使用していることを知る必要があります。これにより、後で実装を変更することもできなくなります。 「クリア」メソッドを追加すると、クリックハンドラーが$(this).prevAll("select.combo").combobox("clear")
に簡単になります。
- ウィジェットにクリアボタンを作成するオプションを与えます。ユーザーはいつでもその機能を無効にして、必要に応じて独自のクリアボタンを追加することができます。 autocomboboxのためのクリアボタンを与えるためにどのよう
+1うまくやった、私があなたが私が似たような試みをしようとしていたことがわかった。素晴らしい例! – dkroy
これは最も一般的な解決策だと思います。私はリンクに依存しないので、他のコンポーネントでコンボボックスをクリアすることができます。 THank yoU! – ClayKaboom