2011-07-29 9 views
2

私はほとんど完全に必要な機能を持っており、少し助けを求めています。 VendorIDプロパティを持つモデルがあります。私はこのモデルを使って強く型付けされたビューを持っています。オートコンプリートを使用する入力テキストボックスからベンダーを選択することができます。jquery autocomplete MVC3

モデルのVendorIDプロパティを、このカミソリの構文でビューの非表示フィールドにバインドします。

@Html.HiddenFor(m => m.VendorID) 

は、ユーザーのテキストボックスへのいくつかの文字で種類や項目を選択は、私が持っているjqueryの関数は隠しフィールドの値を設定した場合。これまですべてがうまくいっています。私が持っている問題は、ユーザーがテキストボックスを完全にクリアしたり、無効なテキストを入力したり、有効な値が選択されていないのに、隠しフィールドを更新できない場合です。

これは私が今まで持っていた私のjqueryです。

$(document).ready(function() { 
    $('#vendorautocomplete').val($('#VendorName').val()); //prepopulate our vendorautocomplete textbox from our model 
}); 

$(function() { 

    $('#vendorautocomplete').autocomplete({ 

     source: function (request, response) { 
      $.ajax({ 
       url: "/test/vendors", type: "POST", dataType: "json", //Url to our action supplying a list of vendors 
       data: { searchString: request.term, maxRecords: 10 }, 
       success: function (data) { 
        response($.map(data, function (item) { 
         return { label: item.VendorName, value: item.VendorName, id: item.VendorID }; 
        })); 
       } 
      }); 
     }, 
     select: function (event, ui) { 
      $('#VendorID').val(ui.item ? ui.item.id : 0); //Set our VendorID hidden for model binding 
     } 

    }); 
}); 

私が選択するのと同様のオートコンプリート機能で何かを行うことができ期待していた:だけぼかしのために上記:,しかし、それは動作しませんでした。私は、テキストボックスの値に基づいてベンダーのIDを調べるためにぼかしイベントを使用することができますが、私は無効なベンダー名を検出し、非表示フィールドを0に設定できるはずですどこがわからないのですか?

答えて

1

スクリプトに以下を追加することで、私がしたいことを達成することができました。

私は変更イベント

$(function() { 
     $('#vendorautocomplete').change(function() { 
      if ($('#vendorautocomplete').val() == null || $('#vendorautocomplete').val() === "") { 
       $('#VendorID').val(null); 
       $('#VendorName').val(''); 
      } 
     }); 
    }); 

ない、それは最高のsolutuionだが、それが動作し、I確かに空のテキストボックスをチェックし、不良検索データについては

(値が返されない)

success: function (data) { 
        var arr = $.map(data, function (item) { return { label: item.VendorName, value: item.VendorName, id: item.VendorID }; }); 
        if (arr.length == 0) { 
         $('#VendorID').val(null); 
         $('#VendorName').val(''); 
        } 
        response(arr); 
       } 

他の問題に移る必要があります。