jQuery自动完成:如何防止选择重复

时间:2019-06-24 15:54:38

标签: javascript jquery

如果先前已选择特定的ID,我想防止在select: function()中重复选择。 我想防止在我的代码中重复roll No,如下所示。

    select: function( event, ui ) { 
            //var item = ui.item.data;                      
        id_arr = $(this).attr('id');
        id = id_arr.split("_");            
        $('#rollNumber_'+id[1]).val(ui.item.data.rollNumber);
        $('#name_'+id[1]).val(ui.item.data.name);  
        $('#class_'+id[1]).val(ui.item.data.class);  
    }

HTML

<div id="students">
  <div id="first">
   <input type="number" id="rollNumber_1" >
   <input type="text" class="name" id="name_1" >
   <input type="text" id="class_1" >
  </div>
  <div id="second">
   <input type="number" id="rollNumber_2" >
   <input type="text" class="name" id="name_2" >
   <input type="text" id="class_2" >
  </div>
 </div>

1 个答案:

答案 0 :(得分:1)

防止重复

可以有许多不同的方法,这取决于代码的逻辑和情况。从当前的情况和代码中,我看到了两种实现方法。

  1. 在设置$('#rollNumber _'+ id [1])的值时,可以验证Value是否为空。如果为空,则表示用户是第一次选择它。 :D
  2. 将选定的ID保存在阵列或Dom中。

让我给一个示例演示

方法1

select: function( event, ui ) {                       
    id_arr = $(this).attr('id');
    id = id_arr.split("_");  

    /* Logic goes here */
    var rollNoVal = $('#rollNumber_'+id[1]).val();

    if(rollNoVal != '') {
       console.log('Duplicate selection is not allowed');
       return;
    }
    /* Logic done here */

    $('#rollNumber_'+id[1]).val(ui.item.data.rollNumber);
    $('#name_'+id[1]).val(ui.item.data.name);  
    $('#class_'+id[1]).val(ui.item.data.class);  
}

方法2

  var selectedStudents = [];
  select: function( event, ui ) {                       
    id_arr = $(this).attr('id');
    id = id_arr.split("_");  

    /* Logic goes here */
    var inArrayExists = selectedStudents.indexOf(ui.item.data.rollNumber);
    if(inArrayExists != -1) {
       console.log('Duplicate selection is not allowed');
       return;
    }

    // Push to an array
    selectedStudents.push(ui.item.data.rollNumber);
    /* Logic done here */

    $('#rollNumber_'+id[1]).val(ui.item.data.rollNumber);
    $('#name_'+id[1]).val(ui.item.data.name);  
    $('#class_'+id[1]).val(ui.item.data.class);  
 }