考虑一个包含一些值的数组
array = {'microsoft','micromax', 'miniclip','michael jackson','million','milky way'}
当用户开始输入文字时,请说他/她正试图输入million
。当用户开始输入'mi'
时,数组中的上述建议将显示给用户。
我的问题:
让我们假设用户正在键入“迷你剪辑”这个词,通过拼写错误/他开始输入'mni' or 'minc' or 'nim' or 'imn' or 'nim' instead of 'min',
这个场景也需要向用户显示建议。不管怎么说,那些打字的字符可以在'miniclip'这个词中找到。 Typo对于所有入门级用户/普通用户来说都很常见。所以我需要javascript / php / ajax / opensource库中的代码来适应这种情况。
答案 0 :(得分:4)
<form action=""><input type="text" name="word" id="word"></form>
<div id="auto"></div>
$(function(){
$('#word').keyup(function(e){
var input = $(this).val();
$.ajax({
type: "get",
url: "autocomplete.php",
data: {word: input},
async: true,
success: function(data){
var outWords = $.parseJSON(data);
$('#auto').html('');
for(x = 0; x < outWords.length; x++){
$('#auto').prepend('<div>'+outWords[x]+'</div>'); //Fills the #auto div with the options
}
}
})
})
});
不要忘记链接jQuery
...
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
您需要执行一些操作,例如向onclick
的{{1}}个div
添加#auto
事件,以替换#word
(输入字段)的内容。< / p>
$array = array('microsoft','micromax', 'miniclip','michael jackson','million','milky way');
$input = urldecode($_GET['word']); //Get input word/phrase (decode in case of spaces etc.)
$length = strlen($input); //Get length of input word
// $min = $length - 1; //Length of word - 1
// $max = $length + 1; //Length of word + 1
$returned = preg_grep('/^(['.$input.']{'.$length.'}.*)$/i', $array); //Find matches in $array and return as array
$returned = array_values($returned); //Re-index from 0
echo json_encode($returned); //Returm json string to ajax call
/^([$input]{$length}.*)$/i
/
=&gt;开始分隔^
=&gt;字符串开头(
=&gt;启动捕获组[
=&gt;开始一个角色类$input
=&gt;将输入词添加到角色类]
=&gt;结束角色类(4){$length}
=&gt;设置字符串的长度以匹配字符类(输入字的长度).*
=&gt;匹配任何以下字符0次或以上)
=&gt;结束捕获组(3)$
=&gt;匹配字符串结尾/
=&gt;结束分隔符i
=&gt;不区分大小写的修饰符我已添加评论的$min
和$max
变量...我认为您可能的附加功能...您将通过更改来实现它们:< / p>
{'.$length.'} <-- Change this
{'.$min.','.$max.'} <--To that
{'.$length.','.$max.'} <-- Or that (or another combination)
一个例子可能最能说明这是如何运作的......
假设一个自动正确的数组:
$array = array('loser', 'loses', 'losing');
和输入:
lose
目前({'.$length.'}
)代码将返回:
loser
loses
但如果您将其更改为{'.$min.','.$max.'}
(并取消注释$min
/ $max
);它将返回:
losing
loser
loses
答案 1 :(得分:0)
试试这个
这是index.php
<html>
<body>
<input type="text" name="testid" id="testid" >
<div id="result">
</div>
</body>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
$(document).ready(function(){
var xhr = null;
$('#testid').on("keyup", function(){
if(xhr !== null) {
xhr.abort();
}
var searchkey = $(this).val();
xhr = $.ajax({
method: "POST",
url: "ajax_request.php",
data: { searchkey: searchkey }
})
.done(function( msg ) {
$('#result').html(msg);
});
});
$(document.body).on('click', ".listitem", function(e){
var values = $(this).html();
$('#testid').val(values);
$('#result').html('');
return false;
});
});
</script>
</html>
这个是你的ajax_request.php
<?php
$arr = array("Shailesh Sonare", "Hello World", "Hello Universe");
$html = "<ul>";
foreach ($arr as $key => $value) {
$html .= "<li class='listitem'>" . $value . "</li>";
}
$html .= "</ul>";
echo $html;