我有一个输入标记,它接受一个调用AJAX的用户输入,从我的数据库中动态输出建议。问题是我想存储与该属性关联的主键。
当用户选择一个值时,我已经找到了将其设置为主键的方法;但我宁愿只在前端显示属性。基本上我正在考虑做的是使用选项标签并将值设置为主键,但在阅读了它的文档之后,看起来它看起来不会起作用。
HTML:
<input type="text" id = "zip_id" class="tftextinput2" autocomplete = "off" name="zip" placeholder="Zip Code" onkeyup = "autocompleter()">
<ul id = "zip_codes_list_id"></ul>
JS:
function autocompleter()
{
var min_length = 1; // min caracters to display the autocomplete
var keyword = $('#zip_id').val();
if (keyword.length >= min_length) {
$.ajax({
url: 'ajax_refresh.php',
type: 'POST',
data: {keyword:keyword},
success:function(data){
$('#zip_codes_list_id').show();
$('#zip_codes_list_id').html(data);
}
});
} else {
$('#zip_codes_list_id').hide();
}
}
// set_item : this function will be executed when we select an item
function set_item(item)
{
// change input value
$('#zip_id').val(item);
// hide proposition list
$('#zip_codes_list_id').hide();
}
PHP:
<?php
//connect to db here
$keyword = '%'.$_POST['keyword'].'%';
$sql = "SELECT * FROM zip_codes WHERE zip LIKE (:keyword) ORDER BY zip_codes_id ASC LIMIT 0, 10";
$query = $pdo->prepare($sql);
$query->bindParam(':keyword', $keyword, PDO::PARAM_STR);
$query->execute();
$list = $query->fetchAll();
foreach ($list as $rs)
{
// put in bold the written text
$zip = str_replace($_POST['keyword'], '<b>'.$_POST['keyword'].'</b>', $rs['zip']);
// add new option
// echo '<li onclick="set_item(\''.str_replace("'", "\'", $rs['zip']).'\')">'.$zip.'</li>'; (this one only passes the attribute)
echo '<li " onclick="set_item(\''.str_replace("'", "\'", $rs['zip_codes_id']).'\')">'.$zip.'</li>';
//this one passes the attribute but changes the displayed value to the primary key.
}
?>
从PHP文件中可以看出,我要做的是传递主键值,但保持显示的值为属性。我不知道该怎么做。我应该使用UL标签吗?
答案 0 :(得分:0)
您的代码中的问题是您尝试输入的zip_id
值,但此输入包含zip
字段值 - 我认为它是文本表示。您可以通过以下几种方式将zip_id
保存在前端 - 将其存储在模型中(如果您使用的是某些MVC框架,但我认为并非如此)或者只需添加一个隐藏的输入字段:
<input type="hidden" id="actual_zip_id" name="zip_id">
和
function set_item(item)
{
// change input value
$('#actual_zip_id').val(item);
// hide proposition list
$('#zip_codes_list_id').hide();
}
关于自动填充邮政编码的整个想法,它看起来很讨厌,正如Darren Gourley指出的那样(查看评论)。
所以你首先要用正则表达式验证它,然后像你那样做与数据库相关的逻辑:
$('#zip_id').on('change', function(){
// your stuff
})
此致,亚历山大