Check If Select Is Displaying Options July 31, 2024 Post a Comment I have the following HTML code: How do I check if the s of the are displayed? For example, this is considered as the s of the Solution 1: You can try listening on click, blur and key press event. I am just toggling a open variable to true or false on each of the event.// if menu is open then true, if closed then false// we start with falsevar open = false; // just a function to print out messagefunctionisOpen(){ if(open) return"menu is open"; elsereturn"menu is closed"; } // on each click toggle the "open" variable $("#myselect").on("click", function() { open = !open; console.log(isOpen()); }); // on each blur toggle the "open" variable// fire only if menu is already in "open" state $("#myselect").on("blur", function() { if(open){ open = !open; console.log(isOpen()); } }); // on ESC key toggle the "open" variable only if menu is in "open" state $(document).keyup(function(e) { if (e.keyCode == 27) { if(open){ open = !open; console.log(isOpen()); } } });Copy<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><selectid="myselect"><optionselected>Test 1</option><option>Test 2</option><option>Test 3</option></select>CopySolution 2: You can use change event in case of not displayed, and focus event for displayed$("#myselect").on({ "change": function() { $(this).blur(); }, 'focus': function() { console.log("displayed"); }, "blur": function() { console.log("not displayed"); }, "keyup": function(e) { if (e.keyCode == 27) console.log("displayed"); } });Copy<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><selectid="myselect"><optionselected>Test 1</option><option>Test 2</option><option>Test 3</option></select>CopySolution 3: After reading, I´ve realized that Option tags are not "usual" DOM elements. Then, is not so easy to control it (instead you are checking click, blur, and combining other methods as we started trying before).Now I´ve managed you finally found the solution in a mix of the first idea we had, then, i´ll just explain the other possible solutions you have and all the things I´ve learned about selects:If you DON´t add a size attribute to the select, you will not be able to detect keypress at the time it´s open.If you add a size attribute bigger than 1 to the select, it will detect keypress, but will loose it´s format and a list will appear.If you try to use offset, and similar, to check wether the select is open, is also not working, as the option objects do not have offset functions... (they are not usuarl DOM objects)Click/focus will also not be enough, as the focus remains in select after a "ESC" click.Then, after all those things reviewed, I think it´s not possible to make it in a pure HTML way without doing a lot of click/blur controls like answered before.Anyway, to clarify, there are lots of jquery librarys that will help you to simulate a select/option dropdown, and to control if it´s open.I hope this answer will solve your Question. Check this functional fiddle I´ve prepared for you to show the jquery dropdown way:$('#jq-dropdown-1').on('show', function(event, dropdownData) { console.log("SHOWN"); }).on('hide', function(event, dropdownData) { console.log("HIDDEN"); });Copy<linkhref="https://rawgit.com/claviska/jquery-dropdown/master/jquery.dropdown.min.css" /><scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><scripttype="text/javascript"src="https://rawgit.com/claviska/jquery-dropdown/master/jquery.dropdown.min.js"></script><ahref="#"data-jq-dropdown="#jq-dropdown-1">dropdown</a><divid="jq-dropdown-1"class="jq-dropdown jq-dropdown-tip"><ulclass="jq-dropdown-menu"><li><ahref="#1">Item 1</a></li><li><ahref="#2">Item 2</a></li><li><ahref="#3">Item 3</a></li><liclass="jq-dropdown-divider"></li><li><ahref="#4">Item 4</a></li><li><ahref="#5">Item 5</a></li><li><ahref="#5">Item 6</a></li></ul></div><buttonid="clickme">click me</button>CopyThose are the docs I´ve read to understand it:jQuery keypress/keyup/etc events not fired when select box is expandedHow to detect escape key press with JavaScript or jQuery?jQuery Event Keypress: Enter keyKeypress event on chosen single selectSolution 4: Im suggesting you to use new jquery selectmenu which is providing selectmenu open event$("#myselect").selectmenu({ open: function(event, ui) { alert("opened"); } });Copylabel { display: block; } select { width: 200px; }Copy<linkrel="stylesheet"href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"><scriptsrc="//code.jquery.com/jquery-1.10.2.js"></script><scriptsrc="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script><selectid="myselect"><optionselected>Test 1</option><option>Test 2</option><option>Test 3</option></select>CopyRef : http://api.jqueryui.com/selectmenu/#event-openSolution 5: What about simple check when jquery is 1.6+if ($(".selector").is(":focus")){ //do stuff } Copyor$(".selector").on('focus', function() { // do stuff }); CopyIt can do the trick. Share Post a Comment for "Check If Select Is Displaying Options"
Post a Comment for "Check If Select Is Displaying Options"