2012-04-19 9 views
0

私はこのような私のページでjqueryのオートコンプリートコンボボックスました:私はAJAX呼び出しを実行し、隠された分野でいくつかの情報を変更selectchangeイベントのjQueryのオートコンプリート変更イベント

$.widget("ui.combobox", { 
     _create: function() { 
     ... 
     var input = this.input = $("<input>") 
       .insertAfter(select) 
       .val(value) 
       .autocomplete({ 
        ... 
        select: function(event, ui) { 
        ... 
        change: function(event, ui) { 
        ... 

$(function() { 
    $("#myid").combobox(); 
} 

を、しかし、ときに私の問題が表示されます何も入力せずににフォーカスを合わせずにテキストフィールドに「Submit」ボタンをクリックします。changeイベントはトリガーされず、サーバー上で間違ったデータを取得します(基本的には、選択変更イベントによって以前に設定された最新のものをキャッチする必要はありません)。では、フォームを送信する前に、テキストフィールドを非フォーカスにしてchangeイベントをトリガーするにはどうすればよいですか?あるいは、テキストフィールドの最新の変更をキャッチしてトリガーする他の方法があります(いくつかのonkeypressイベントによって変更を置き換えます)?助けてくれてありがとう。あなたが送信ボタン

$(".submit-btn").click(function(e){e.preventDefault();}); 

この方法で送信ボタンのデフォルトのアクションは文句を言わないフォームを送信し、あなたのフォームは、ユーザーだって選択や変更イベントを取得します無効にでき

答えて

0

を提出クリックすることで非集束ていますボタン

+0

大丈夫ですが、次は何ですか?それ以降にフォームを送信すると、私は間違った値を与えます –

+0

その場合、onselectまたはonchangeハンドラの中にある関数を抽象化できず、送信ボタンをクリックしても同じものを呼び出すことはできませんか? – walmik

+0

このfunc iamは現在のオブジェクトコンテキストを取得しています(私は3つのオートコンプリートボックスを持っています)、クリックした後に間違っている可能性があります –

0

あなたができることは、変更イベントの隠しフィールドデータを取り出す機能を別にすることです。また、データの更新後に呼び出される関数のパラメータとしてコールバック関数を使用します。次に、changeイベントハンドラとフォームのsubmitハンドラで同じ関数を使用できます。サブミットハンドラでは、デフォルトのサブミット処理を無効にし、その関数にコールバックを提供し、隠しフィールドでデータが更新されたときにJSを介してフォームを送信できるようにします。

上記の解決策はうまくいくはずですが、自分のサーバーからデータを取得する場合は、クライアント側のJavascriptでデータを取得しないようにしてください。たとえば、隠しフィールドを使用してユーザーが入力した文字列をマップする場合などです。 "poland"をあなたのデータベースのIDに変換し、そのIDを隠しフィールドに格納すると、 "poland"を文字列としてサーバーに送信し、サーバー上でこのマッピングを処理する必要があります。そうすれば、あなたのフォームはサーバーからこのマッピングを取得するのを待つ必要はありません。もちろん、これはAJAXリクエストをサーバに送信し、サーバからアクセスできない他のサーバには送信しないと実行できません。

+0

あなたは正しいIamを都市地域の国IDに設定しますが、異なる国の多くの都市が同じ名前を持っていて、データベース内の異なるIDを持っているため、比較は機能しません。コンボボックスで解決できるかもしれませんが、名前がちょうど手で入力されたものではありません –

関連する問題