mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
Menu: Move item matching code into menu
This commit is contained in:
parent
50958718c2
commit
5d3f91bcbe
@ -51,39 +51,7 @@
|
||||
menu.widget().hide();
|
||||
break;
|
||||
default:
|
||||
clearTimeout(menu.filterTimer);
|
||||
var prev = menu.previousFilter || "";
|
||||
var character = String.fromCharCode(event.keyCode);
|
||||
var skip = false;
|
||||
if (character == prev) {
|
||||
skip = true;
|
||||
} else {
|
||||
character = prev + character;
|
||||
}
|
||||
|
||||
var match = menu.widget().children("li").filter(function() {
|
||||
return new RegExp("^" + character, "i").test($(this).text());
|
||||
});
|
||||
var match = skip && match.index(menu.active.next()) != -1 ? match.next() : match;
|
||||
if (!match.length) {
|
||||
character = String.fromCharCode(event.keyCode);
|
||||
match = menu.widget().children("li").filter(function() {
|
||||
return new RegExp("^" + character, "i").test($(this).text());
|
||||
});
|
||||
}
|
||||
if (match.length) {
|
||||
menu.focus(event, match);
|
||||
if (match.length > 1) {
|
||||
menu.previousFilter = character;
|
||||
menu.filterTimer = setTimeout(function() {
|
||||
delete menu.previousFilter;
|
||||
}, 1000);
|
||||
} else {
|
||||
delete menu.previousFilter;
|
||||
}
|
||||
} else {
|
||||
delete menu.previousFilter;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@ -50,7 +50,9 @@
|
||||
<li><a href="#">Ada</a></li>
|
||||
<li><a href="#">Adamsville</a></li>
|
||||
<li><a href="#">Addyston</a></li>
|
||||
<li><a href="#">Adelphi</a></li>
|
||||
<li><a href="#">Delphi</a></li>
|
||||
<li><a href="#">Saarland</a></li>
|
||||
<li><a href="#">Salzburg</a></li>
|
||||
</ul>
|
||||
|
||||
<ul id="menu2">
|
||||
|
36
ui/jquery.ui.menu.js
vendored
36
ui/jquery.ui.menu.js
vendored
@ -87,6 +87,42 @@ $.widget("ui.menu", {
|
||||
event.preventDefault();
|
||||
event.stopImmediatePropagation();
|
||||
break;
|
||||
default:
|
||||
clearTimeout(self.filterTimer);
|
||||
var prev = self.previousFilter || "";
|
||||
var character = String.fromCharCode(event.keyCode);
|
||||
var skip = false;
|
||||
if (character == prev) {
|
||||
skip = true;
|
||||
} else {
|
||||
character = prev + character;
|
||||
}
|
||||
function escape(value) {
|
||||
return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
}
|
||||
var match = self.widget().children(".ui-menu-item").filter(function() {
|
||||
return new RegExp("^" + escape(character), "i").test($(this).text());
|
||||
});
|
||||
var match = skip && match.index(self.active.next()) != -1 ? self.active.nextAll(".ui-menu-item") : match;
|
||||
if (!match.length) {
|
||||
character = String.fromCharCode(event.keyCode);
|
||||
match = self.widget().children(".ui-menu-item").filter(function() {
|
||||
return new RegExp("^" + escape(character), "i").test($(this).text());
|
||||
});
|
||||
}
|
||||
if (match.length) {
|
||||
self.focus(event, match);
|
||||
if (match.length > 1) {
|
||||
self.previousFilter = character;
|
||||
self.filterTimer = setTimeout(function() {
|
||||
delete self.previousFilter;
|
||||
}, 1000);
|
||||
} else {
|
||||
delete self.previousFilter;
|
||||
}
|
||||
} else {
|
||||
delete self.previousFilter;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user