Your jsfiddle對於哪個組合框應該清除有點含糊不清 - 有兩個組合框,但只有一個清除鏈接,所以如果鏈接應該只清除一個或兩個組合框並不明顯。
我懷疑在現實世界中,每個組合框都有它自己的明確鏈接。爲您的清除鏈接選擇正確的文本框都取決於您的HTML。一個簡單的情況是,其中明確聯繫的下一個兄弟到你<select>
元素:
<select class="combo">
...
</select>
<a href="#" class="clearCombo">Clear</a>
然後,你可以通過使用類創建一個呼叫的連擊。然後一次創建清晰的點擊處理程序。處理程序將使用.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")
。
- 爲您的小部件提供創建清除按鈕本身的選項。用戶可以隨時禁用它,並根據需要添加自己的清除按鈕。
+1很好地完成,當我意識到你不能通過ID選擇它我會嘗試類似的東西。很好的例子! – dkroy
我認爲這是最通用的解決方案。這樣我不依賴於鏈接,我可以讓其他組件清除我的組合框。 謝謝你! – ClayKaboom