2016-11-09 5 views
1

私はjqueryオートコンプリートを使用しています。私のケースでは、私のページに複数のオートコンプリートのテキストボックスと非表示のフィールドがあります。 例えばJqueryオートコンプリートが正しく動作しない

<input class='myclass' type='text'> </input> 
<input class='.emp_num_hidden' type='hidden'> </input> 
<input class='myclass' type='text'> </input> 
<input class='.emp_num_hidden' type='hidden'> </input> 

のように...

私は、隠しフィールドの変更イベントを発生時にそれが発生し、複数の時間 は、以下の私のコードです:

$(".myclass").each(function() { 

var $empName= $(this); 
var $empNumber = $empName.next('input:hidden'); 
//things to do 
//Setting variable e.g url... 

$empName.autocomplete(url,{ 

//code... 

}).result(function(event,data,formatted) 
{ 
$empNumber.val(formatted).change(); 
}); 
}); 

上記のコードで$ empNumberは、オートコンプリート値を格納するために使用される隠しフィールドを保持します。つまり、 オートコンプリートからテキストを選択すると、その選択した従業員番号は隠しフィールドに格納されます。 この隠しフィールドの値に基づいて、私は彼の 従業員番号に基づいて従業員の詳細を返すajaxコールを行いたいと思います。 私は以下のように隠しフィールドのイベントを変更するために手書きを書いています。

$(.emp_num_hidden).on('change',function (

)}; 

ここで、 'emp_num_hidden'は、非表示フィールドのクラスです。

隠しフィールドの変更で複数のイベントが発生しないようにするにはどうすればよいかお勧めします。

答えて

0

これは$(this)オブジェクトを使用して行われます。 changeイベントにはターゲットがあるため、1つの要素にしか影響しません。この要素に対してコールバック関数が実行されています(this)。たとえば:

$(".emp_num_hidden").on('change', function (e){ 
    alert($(this).val()); 
}); 

は何が起こるだろうことは隠しフィールドはそれだけで隠しフィールドから従業員番号を含む、変更されたときに警告ウィンドウが表示されるということです。また、コードにいくつか修正が加えられていることに気づくでしょう。

個人的には、私はidclassの両方の属性をオブジェクトに使用します。これにより、セレクタには広い範囲と狭い範囲が与えられます。

例:

HTML

<input class='myclass' type='text' id='entry-txt-1' /> 
<input class='emp_num_hidden' type='hidden' id='hide-txt-1' /> 
<input class='myclass' type='text' id='entry-txt-2' /> 
<input class='emp_num_hidden' type='hidden' id='hide-txt-2' /> 

jQueryの

ビット、さらにこれを取る
$(function(){ 
    var $empName, $empNumber; 

    $(".myclass").each(function(key, el) { 
    $empName= $(el); 
    $empNumber = $empName.next("input[type='hidden']"); 
    // things to do 
    // Setting variable e.g url... 
    $empName.autocomplete(url, { 
     //code... 
    }).result(function(e, d, f){ 
     $empNumber.val(f).change(); 
    }); 
    }); 
    $(".emp_num_hidden").on('change', function(e){ 
    var empId = $(this).attr("id"); 
    var $employeeNumberField = $("#" + empId); 
    // Do the needful... 
    }); 
}); 

、あなたはデータ属性を利用して検討する必要があります。また、オートコンプリート用のselectイベントもご覧ください。以下のような何か:

$(function(){ 
    $(".myclass").autocomplete({ 
    source: url, 
    select: function(e, ui){ 
     $(this).val(ui.item.label); 
     $(this).data("emp-number", ui.item.value); 
     $.post("employeedata.php", { n: ui.item.value }, function(data){ 
     $("#empData").html(data); 
     }); 
     return false; 
    } 
    }); 
}); 

これはurllabelvalueプロパティを持つ配列オブジェクトを返すことを前提としています。これにより、ユーザーが選択したフィールドに従業員番号がdata-emp-number属性として追加されます。 labelは従業員名、valueは従業員番号です。このコールバックを使用して、従業員番号に基づいて他のすべての従業員データを表示することもできます。

作業例:あなたの助けをhttps://jsfiddle.net/Twisty/zmevd0r0/

+0

感謝..しかし、複数回発射イベントを防ぐことができます$これを使ってどのように私はここで理解していませんでしたか?隠しフィールドの変更ハンドラでは、すでに述べたようにこのオブジェクトを使用しましたが、イベントの発生回数は複数回変更しています。イベントバインディングの問題はありますか? – NullException

+0

jquery autocomplete 1.0 versionを使用しています。その中でselectイベントを実装する方法に関する十分なドキュメントが見つかりませんでした。あなたはこれのソースを知っていますか? – NullException

+0

@ Shubhさんはあなたの投稿に特定のものを使用していると指定していませんでした。私の例では、jQeury 3.1.1とjQuery UI 1.12.1を使用しています。可能であれば、より新しいバージョンのjQuery UIを使用します。あなたのバージョンでテストする方法はありません。私の答えを更新できるように、使用しているjQueryとjQuery UIのバージョンで投稿を編集して更新してください。 – Twisty

関連する問題