Php ajax下拉菜单的键盘导航
我使用下面的代码作为Ajax下拉列表的建议(一些类似于google的建议)。它工作得很好 [来源]:此代码的 html代码Php ajax下拉菜单的键盘导航,php,html,ajax,Php,Html,Ajax,我使用下面的代码作为Ajax下拉列表的建议(一些类似于google的建议)。它工作得很好 [来源]:此代码的 html代码 身体{ 字体:11px arial; } .建议链接{ 背景色:#FFFFFF; 填充:2px6px 2px6px; } .建议链接{ 背景色:#3366CC; 填充:2px6px 2px6px; } #搜索建议{ 位置:绝对位置; 背景色:#FFFFFF; 文本对齐:左对齐; 边框:1px实心#000000; } javascript代码 //获取特定于浏览器的Xml
身体{
字体:11px arial;
}
.建议链接{
背景色:#FFFFFF;
填充:2px6px 2px6px;
}
.建议链接{
背景色:#3366CC;
填充:2px6px 2px6px;
}
#搜索建议{
位置:绝对位置;
背景色:#FFFFFF;
文本对齐:左对齐;
边框:1px实心#000000;
}
javascript代码
//获取特定于浏览器的XmlHttpRequest对象
函数getXmlHttpRequestObject(){
if(window.XMLHttpRequest){
//IE7+、Firefox、Chrome、Opera、Safari的代码
返回新的XMLHttpRequest();
}else if(window.ActiveXObject){
//IE6、IE5的代码
返回新的ActiveXObject(“Microsoft.XMLHTTP”);
}否则{
提醒(“是时候升级你的浏览器了。你不这么认为吗?”);
}
}
//我们的XmlHttpRequest对象用于获取自动建议
var searchReq=getXmlHttpRequestObject();
//从搜索文本框上的keyup调用。
//启动AJAX请求。
函数searchSuggest(){
if(searchReq.readyState==4 | | searchReq.readyState==0){
var str=escape(document.getElementById('txtSearch').value);
searchReq.open(“GET”,'searchSuggest.php?search='+str,true);
searchReq.onreadystatechange=handleSearchSuggest;
searchReq.send(空);
}
}
//在返回AJAX响应时调用。
函数handleSearchSuggest(){
如果(searchReq.readyState==4){
var ss=document.getElementById('search\u suggest')
ss.innerHTML='';
var str=searchReq.responseText.split(“\n”);
对于(i=0;i
现在我想知道我是否可以在下拉列表中导航键的帮助下。i、 e
使用向下箭头键打开下拉列表。打开下拉列表后,用户可以使用向上箭头、向下箭头、主页、结束、向上翻页、向下翻页键在下拉项目之间导航,然后使用Enter键选择项目。要关闭列表而不更改值,用户可以按Esc键
很高兴拥有上述所有功能。-只有在可行的情况下
但是需要使用向上箭头和向下箭头进行导航。-这两个需要帮助吗
提前谢谢 您的意思是文本输入下出现的自动完成选项吗?在这种情况下,您需要为keypress设置一个选项,如果它是向下箭头,那么您可以对$(this)元素执行与当前相同的操作“mouse\u out”,对它下面的元素执行“mouse\u over”。对于向上箭头,与上面的箭头相同 首先,您需要每个div上的id,并将它们按顺序排列。然后添加按键功能
for(i=0; i < str.length - 1; i++) {
//Build our element string. This is cleaner using the DOM, but
//IE doesn't support dynamically added attributes.
var suggest = '<div onmouseover="javascript:suggestOver(this);" ';
suggest += 'onmouseout="javascript:suggestOut(this);" ';
suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
suggest += 'onkeypress="javascript:keyPressFunc(k,this);' //THIS IS NEW
suggest += 'id="item"+i'; //THIS IS THE NEW LINE TO ADD
suggest += 'class="suggest_link">' + str[i] + '</div>';
ss.innerHTML += s
}
function keyPressFunc(k, comesFrom)
{
keyIn = k.keyCode;
suggestOut(this);
getsFocusId = "item" + 39-keyIn //38 is up arrow, 40 is down
suggestOver(document.getElementById(getFocusId));
}
//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
} else if(window.ActiveXObject) {
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
} else {
alert("It's about time to upgrade your browser. don't you think so?");
}
}
//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();
//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest() {
if (searchReq.readyState == 4 || searchReq.readyState == 0) {
var str = escape(document.getElementById('txtSearch').value);
searchReq.open("GET", 'searchSuggest.php?search=' + str, true);
searchReq.onreadystatechange = handleSearchSuggest;
searchReq.send(null);
}
}
//Called when the AJAX response is returned.
function handleSearchSuggest() {
if (searchReq.readyState == 4) {
var ss = document.getElementById('search_suggest')
ss.innerHTML = '';
var str = searchReq.responseText.split("\n");
for(i=0; i < str.length - 1; i++) {
//Build our element string. This is cleaner using the DOM, but
//IE doesn't support dynamically added attributes.
var suggest = '<div onmouseover="javascript:suggestOver(this);" ';
suggest += 'onmouseout="javascript:suggestOut(this);" ';
suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
suggest += 'class="suggest_link">' + str[i] + '</div>';
ss.innerHTML += suggest;
}
}
}
//Mouse over function
function suggestOver(div_value) {
div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
div_value.className = 'suggest_link';
}
//Click function
function setSearch(value) {
document.getElementById('txtSearch').value = value;
document.getElementById('search_suggest').innerHTML = '';
}
for(i=0; i < str.length - 1; i++) {
//Build our element string. This is cleaner using the DOM, but
//IE doesn't support dynamically added attributes.
var suggest = '<div onmouseover="javascript:suggestOver(this);" ';
suggest += 'onmouseout="javascript:suggestOut(this);" ';
suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
suggest += 'onkeypress="javascript:keyPressFunc(k,this);' //THIS IS NEW
suggest += 'id="item"+i'; //THIS IS THE NEW LINE TO ADD
suggest += 'class="suggest_link">' + str[i] + '</div>';
ss.innerHTML += s
}
function keyPressFunc(k, comesFrom)
{
keyIn = k.keyCode;
suggestOut(this);
getsFocusId = "item" + 39-keyIn //38 is up arrow, 40 is down
suggestOver(document.getElementById(getFocusId));
}
$(".suggest_link").keypress(function(k) {.....