Custom Drop Down Box - Javascript

2014-03-27 by

$(document).ready(function ()

{

$.fn.hideDropDownLists = function ()

{

var items = $(".dropDownList").find("ul");

items.hide();

$(".dropDownList").removeClass("expaded");

};

//$("html").click(function () {

// $(this).hideDropDownLists();

//});

$(".dropDownList").attr("tabindex", "0");

$(".dropDownList").append("<div class=\"arrow\">V</div>");

$(".dropDownList").click(function () {

var items = $(this).find("ul");

if (items.is(":hidden")) {

var currentVal = $(this).find("input[type=hidden]:first").val();

items.show();

var hiddenli = items.find("li").find("input[value='" + currentVal + "']:first");

$(hiddenli).parent("li").addClass("selectedItem");

try {

$(this).find("ul").scrollTop(0);

$(this).find("ul").scrollTop($(hiddenli).parent("li").position().top);

}

catch(e){}

$(this).addClass("expaded");

}

else {

{

items.hide();

$(this).removeClass("expaded");

}

}

});

$(".dropDownList").keydown(function (e) {

//esc

if (e.keyCode == 27)

{

$(this).click();

e.preventDefault();

e.stopPropagation();

e.cancelBubble = true;

}

//Enter

if (e.keyCode == 13) {

var currentlyHovered = $(this).find('ul').find("li[class='hovered']");

if (currentlyHovered.length == 0) {

$(this).click();

}

else {

$(currentlyHovered[0].parentElement.parentElement).JSDropDownclickItem(currentlyHovered[0]);

}

e.preventDefault();

e.stopPropagation();

e.cancelBubble = true;

return;

}

//Up

if (e.keyCode == 38) {

var items = $(this).find("ul");

if (items.is(":hidden")) {

$(this).click();

e.preventDefault();

e.stopPropagation();

e.cancelBubble = true;

return;

}

var currentlyHovered = $(this).find('ul').find("li.hovered");

if (currentlyHovered.length == 0) {

currentlyHovered = $(this).find('ul').find("li:last");

}

else {

var old = $(currentlyHovered[0]);

if ($(currentlyHovered[0]).prev().length == 0) {

currentlyHovered = $(this).find('ul').find("li:last");

}

else {

currentlyHovered = $(currentlyHovered[0]).prev();

}

old.removeClass("hovered");

old.removeClass("selectedItem");

}

currentlyHovered.addClass("hovered");

e.preventDefault();

e.stopPropagation();

e.cancelBubble = true;

return;

}

//Down

if (e.keyCode == 40) {

var items = $(this).find("ul");

if (items.is(":hidden")) {

$(this).click();

e.preventDefault();

e.stopPropagation();

e.cancelBubble = true;

return;

}

var currentlyHovered = $(this).find('ul').find("li.hovered");

if (currentlyHovered.length == 0) {

currentlyHovered = $(this).find('ul').find("li:first");

}

else {

var old = $(currentlyHovered[0]);

if ($(currentlyHovered[0]).next().length == 0)

{

currentlyHovered = $(this).find('ul').find("li:first");

}

else

{

currentlyHovered = $(currentlyHovered[0]).next();

}

old.removeClass("hovered");

old.removeClass("selectedItem");

}

currentlyHovered.addClass("hovered");

e.preventDefault();

e.stopPropagation();

e.cancelBubble = true;

return false;

}

});

$.fn.JSDropDownclickItem = function (item) {

$(item.parentElement.parentElement).find(".selected").text($(item).text());

$(item.parentElement.parentElement).find("input[type=hidden]:first").val($(item).find("input[type=hidden]").val());

$(item.parentElement.parentElement).find("input[type=hidden]:first").trigger("change");

$(item.parentElement.parentElement).find("ul").visible = false;

$(item.parentElement.parentElement).find("ul").hide();

$(item.parentElement.parentElement).removeClass("expaded");

$(item.parentElement.parentElement).find("ul").find("li").removeClass("selectedItem");

$(item.parentElement.parentElement).find("ul").find("li[class='hovered']").removeClass("hovered");

};

$(".dropDownList").find("ul").hide();

$(".dropDownList").find("ul").find("li").click(function (event)

{

$(this.parentElement.parentElement).JSDropDownclickItem(this);

event.preventDefault();

event.stopPropagation();

}

);

}

);