Я использую jquery-1.9.1.min.js, PHP, MySQL и т. д. для своего веб-сайта. Я использую плагин Bootstrap typeahed для автоматического заполнения текстового поля. КАК пользователь начинает вводить текст в текстовое поле, в конце я извлекаю необходимые совпадающие элементы данных через AJAX, PHP и MySQL.
До сих пор у меня все работает нормально. Но есть одно новое требование. Я не хочу разрешать пользователю вводить данные, отличные от элементов данных, отображаемых в автоматически заполняемом списке. Другими словами, я хочу запретить пользователю выбирать элемент данных только из соответствующего автоматически заполняемого списка. Он/она не должен иметь возможности вводить данные, отличные от записей, присутствующих в автоматически заполняемом списке элементов данных.
typeahead.js уже включен.
Для этого я написал следующий код, но он у меня не сработал. Моя логика такова:
Когда пользователь начинает вводить соответствующие данные, элементы динамически генерируются и автоматически заполняются под текстовым полем. Итак, я думаю о событии onBlur текстового поля, если я проверяю, присутствует ли значение, содержащееся в текстовом поле, в соответствующем массиве элементов данных или нет. Если это не так, просто очистите текстовое поле, предупредите пользователя, чтобы он выбрал значение только из соответствующего автоматически заполняемого списка элементов.
Может моя логика неверна. Если кто-то сможет решить мою проблему более умным способом или просто изменив написанный мной код, это мне очень поможет.
Мой код HTML и jQuery выглядит следующим образом:
/*Here goes the HTML code*/
<form action="products.php" id="manage_product" name ="manage_product" role="form" class="form-horizontal col-md-12" method="post">
<input type="hidden" name="admin_url" id="admin_url" value="http://localhost/xyz/pqr">
<input type="text" class="form-control dynamic_cat" size="20" autocomplete="on" id="product_type_id" name="product_type_id" value="">
</form>
/*Here goes the jQuery code*/
$('.dynamic_cat').keyup(function() {
$(".dynamic_cat").typeahead({
source: function(query, process) {
var textVal = $(".dynamic_cat").val();
var admin_url = $("#admin_url").val();
$.ajax({
url: admin_url+'modules/product_types/product_types.php',
type: 'POST',
data: 'op=get_all_categories',
dataType: 'JSON',
async: true,
success: function(data) {
process(data);
//console.log(textVal);
}
});
}
}).blur(function(data) {
if ($.inArray($(this).val(), data) == -1) {
$('.dynamic_cat').val('');
alert("Please select the value only from list");
}
});
});
Необходимый PHP-код выглядит следующим образом:
<?php
$objProductType = new ProductType();
switch( $op ) {
case "get_all_categories":
$ret = $objProductType->GetAllProductTypeNames();
if(!$ret) {
$error_msg = $objProductType->GetAllErrors();
list($data) = prepare_response($request);
$smarty->assign('data', $data);
} else {
$grid_data = $objProductType->GetResponse();
$category_name = '';
for($i=0;$i<count($grid_data);$i++) {
$category_name[] = $grid_data[$i]['category_name'];
}
echo json_encode($category_name);
die;
}
break;
}
?>