jqueryUIコンボボックスにonchange関数をアタッチするにはどうすればよいですか?これが私のコードです:
$(".cmbBox").combobox({
change:function(){
alert($(this).val());
}
});
値が変更されると、更新された値を警告します。
助けてください..:)
jqueryUIコンボボックスにonchange関数をアタッチするにはどうすればよいですか?これが私のコードです:
$(".cmbBox").combobox({
change:function(){
alert($(this).val());
}
});
値が変更されると、更新された値を警告します。
助けてください..:)
コンボボックスのサンプルソースは、この例の中にあります。change
次のようにソースコードを変更して、基になるselectのイベントをトリガーします(select
プラグイン内のオートコンプリート初期化内のイベントハンドラーを変更します)。
/* Snip */
select: function( event, ui ) {
ui.item.option.selected = true;
self._trigger( "selected", event, {
item: ui.item.option
});
select.trigger("change");
},
/* Snip */
次に、 :の通常のchange
イベントのイベントハンドラーを定義します。select
$(".cmbBox").change(function() {
alert(this.value);
});
残念ながら、これは通常のイベントとまったく同じようには機能しませんselect.change
。コンボボックスから同じアイテムを選択してもトリガーされます。
ここで試してみてください:http://jsfiddle.net/andrewwhitaker/hAM9H/
IMHO、ユーザーがコンボボックスを変更したことを検出するさらに簡単な方法(jQuery UIオートコンプリートコンボボックスのソースコードを微調整する必要はありません)は次のとおりです。これは私のために働きます。確かにリファクタリングする方法はありますが、それらがたくさんある場合は繰り返しです。ここや他の場所で、このウィジェットを詳細に研究して説明してくれたすべての人に感謝します。
$("#theComboBox").combobox({
select: function (event, ui) {
alert("the select event has fired!");
}
}
);
ui.comboboxプラグインに:
selectメソッドの最後に追加しました:
$(input).trigger("change", ui);
「varinput...」の前に追加しました:
select.attr('inputId', select.attr('id') + '_input');
その後、機能的なonchangeイベントを発生させるために... ui.comboboxで、changeメソッドにコメントを付け、そのコードをui.autocompleteを拡張するcheckvalメソッドに移動しました。
$.extend( $.ui.autocomplete, {
checkVal: function (select) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"),
valid = false;
$(select).children("option").each(function () {
if ($(this).text().match(matcher)) {
this.selected = valid = true;
return false;
}
});
if (!valid) {
// remove invalid value, as it didn't match anything
$(this).val("");
$(select).val("");
$(this).data("autocomplete").term = "";
$(this).data("autocomplete").close();
}
}
});
そして、入力変更メソッドを次のようにコーディングしました。
var oCbo = ('#MyCbo').combobox();
$('#' + oCbo.attr('inputId')).change(function () {
// from select event : check if value exists
if (arguments.length < 2) {
$.ui.autocomplete.checkVal.apply(this, [oCbo]);
}
// YOUR CODE HERE
});
ドキュメントの「イベント」セクションに、次のような変更を処理すると記載されています...
$( ".selector" ).autocomplete({
change: function(event, ui) { ... }
});
これは私にとってはうまくいくようです
if('function' == typeof(callback = ui.item.option.parentElement.onchange))
callback.apply(this, []);
直前
self._trigger("selected", event, {
コンボボックスをウィジェットとしてデプロイする場合の最も簡単な方法(IMHO):
ウィジェットで「_create」メソッドを検索します
その中から「オートコンプリート」(入力が管理される場所)を探します
データを取得するための「select」メソッドを追加(使用)します:ui.item.value
(関数($){ $ .widget( "ui.combobox"、{ //デフォルトオプション オプション:{ //オプション...。 }、 _create:function(){ //いくつかのコード...。 //これはあなたが探している入力です input = $( "") .appendTo(ラッパー) .val(value) .addClass( "ui-state-default") //これはあなたが探しているオートコンプリートです .autocomplete({ 遅延:0、 minLength:0、 ソース:function(リクエスト、レスポンス){ //いくつかのコード..。 }、 //これはあなたが探しているselectメソッドです... 選択:function(event、ui){ //これは選択した値です console.log(ui.item.value); }、 変更:function(event、ui){ //いくつかのコード..。 } }) //残りのコード }、 破棄:function(){ this.wrapper.remove(); this.element.show(); $ .Widget.prototype.destroy.call(this); } });
実際、onchangeイベントにはすでに「フック」があります。
必要なメソッド呼び出しまたはコールバックの次の行を変更するだけです。
autocompletechange: "_removeIfInvalid"
$("#theComboBox").combobox({
select: function (event, ui) {
alert("the select event has fired!");
}
}
);