2014-10-20 2 views
0

Я использую twitter bootstrap 3 typeahead, с двигателем подсказки ищейки.typeahead не работает после текстового ввода динамического ввода

Я применил этот typeahead в текстовом поле (класс: typeahead) внутри столбца таблицы html, и после выбора typeahead появляется новая строка.

У меня возникла проблема применить typeahead к этому недавно динамически добавленному текстовому полю (также class: typeahead). Ошибка Chrome Dev: «Uncaught TypeError: не определен не является функция»

Это мой JS:

<script src="<?php echo site_url('assets/js/jquery-2.0.3.min.js');?>"></script> 
<script src="<?php echo site_url('assets/js/bootstrap.min.js');?>"></script> 

<script src="<?php echo site_url('assets/js/bloodhound.js');?>"></script> 
<script src="<?php echo site_url('assets/js/typeahead.jquery.js');?>"></script> 

<script> 

/*/////////////////// 
// bloodhound 
// 
*/ 
var stocksData = source_inventory; 
var stocks = new Bloodhound({ 
    datumTokenizer: function (d) { 
     for (var prop in d) { return Bloodhound.tokenizers.whitespace(d.item_code);}   
    }, 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    //local: ["(A)labama","Alaska","Arizona","Arkansas","Arkansas2","Barkansas"] 
    limit: 5, //#2 added 
    local : stocksData 
}); 
stocks.initialize(); 

/*/////////////////// 
// typeahead 
// 
*/ 
function apply_typeahead(elm){ alert('tes and yes'); 
    $(elm).typeahead(null,{ 
     displayKey: function(stocks) { 
      for (var prop in stocks) { 
       return stocks.item_code; 
      } 
     }, 
     source:stocks.ttAdapter() , 
     updater: function (stocks) { 
      return stocks; 
     } 
    }).on('typeahead:selected', function (obj, datum) { 
     var var_datum = []; 
     var_datum[0] = datum.item_id; 
     dialog_inventory_pull_data(var_datum); 
    }); 
} 

//apply_typeahead('input[name^=ast_code].typeahead'); 



$(document).ready(function(){ 
    /* 
     //some code 
    */ 
}); 


/*$('.typeahead').on('added',function(){ 
    apply_typeahead('input[name^=ast_code].typeahead'); 
    //$('.typeahead').typeahead(typeaheadSettings); 
});*/ 

//JS CUSTOM PAGE 

function table_detail_insert(data){  
    if(data){  
     for(var p = 0;p<data.length;p++){ 
      /*code*/    
     } 
     //apply_typeahead($('input[name^=ast_code].typeahead')); 
     //apply_typeahead('input[name^=ast_code].typeahead'); 
     return data;   
    }else{ 
     console.log('error'); 
    } 
} 
var url_1 = "/inventory/detail"; 
function dialog_inventory_pull_data(data_inventory){ 
    var data_inventory_param = $.map(data_inventory, function(value, index) { 
     return [value]; 
    }); 
    var data_ajax_raw = $.ajax({ 
     url:ajax_url_1, 
     data: {inventory:data_inventory_param}, 
     dataType: "json", 
     success: function(result){ 
      table_detail_insert(result);    
     } 
    }); 
} 

</script> 

я пытался запустить apply_typeahead функции из консоли, она работает с инициализирован текстовым полем, но после того, как новый строка динамически созданная, снова запущенная одна и та же функция из консоли не работает, и все текстовые поля не имеют типа head.

что может быть неправильным?

Благодаря

ответ

0

Проблема в том, для динамически добавляемых элементов ввода, вы должны инициализировать плагин после их создания.

Так один раствор сначала создать метод, который может быть использован повторно инициализировать плагин для прошедшего набора элементов, как

Ссылка: Working on dynamically added input elements with Typeahead

Смежные вопросы