简体   繁体   English

单击输入字段时切换显示样式

[英]Toggle display style when clicking on input field

I want to display a dynamically generated list as long as my this particular input filed is active but as i click outside the input box list should get hidden. 只要此特定输入字段处于活动状态,我就想显示一个动态生成的列表,但是当我在输入框之外单击时,该列表应该被隐藏。 as you run the snipped the list is displayed regardless of whether the input field is focused or clicked on or not, i want it to be hidden when it is not focused. 当您运行已剪切的列表时,无论输入字段是否处于焦点或未单击状态,都会显示该列表,我希望它在不处于焦点状态时被隐藏。

so far I have tried to implement it but this is not working 到目前为止,我已经尝试实现它,但这没有用

 $("#pickup input").click(function() { var num = $(this).find("ul.suggestbox").length; if (num > 0) { $(".suggestbox ul").toggleClass("clickdisplay"); } }); 
 .suggestbox { overflow: auto; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); padding: 1px 1px; z-index: 1; } .clickdisplay { display: block; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <form> <div class="input-field" style="width: 30%"> <label class="label-icon" for="search"><i class="material-icons">search</i> </label> <input id="pickup" placeholder="location" type="search" autocomplete="off" required> </div> <ul class="suggestbox" id="sub_navlist"> <li> option 1 </li> <li> option 2 </li> <li> option 3 </li> <li> option 4 </li> <li> option 5 </li> <li> option 6 </li> <li> option 7 </li> </ul> </form> 

Try the focus and blur events: 尝试聚焦和模糊事件:

 $("#pickup").on('focus', function() { var num = $(this).closest('form').find("ul.suggestbox").length; if (num > 0) { $(".suggestbox").addClass("clickdisplay"); } }); $("body").on('click', function(e) { if ($(e.target).closest('ul.suggestbox,#pickup').length == 0) {//check if the element selected is the input or the list var num = $("ul.suggestbox").length; if (num > 0) { $(".suggestbox").removeClass("clickdisplay"); } } }); 
 .suggestbox { overflow: hidden; height:0; background-color: #f9f9f9; max-width: 170px; margin-top:0; box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); padding: 1px 1px; z-index: 1; } .clickdisplay { display: block; height:auto; } body { height: 400px; 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <form> <div class="input-field" style="width: 30%"> <label class="label-icon" for="search"><i class="material-icons">search</i></br> </label> <input id="pickup" placeholder="location" type="search" autocomplete="off" required> </div> <ul class="suggestbox" id="sub_navlist"> <li>option 1</li> <li>option 2</li> <li>option 3</li> <li>option 4</li> <li>option 5</li> <li>option 6</li> <li>option 7</li> </ul> </form> 

The $(this) is not what you think it is. $(this)不是您想的那样。

I think you meant to do this: 我认为您打算这样做:

 $(function() { $("#pickup").on("focus", function() { var $list = $(this).closest(".input-field").find("ul.suggestbox"); $list.toggle($list.length > 0); // show it if it is not empty }).on("blur", function() { var $list = $(this).closest(".input-field").find("ul.suggestbox"); $list.hide(); // hide this list }).focus(); }); 
 .suggestbox { overflow: auto; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); padding: 1px 1px; z-index: 1; margin-top:-3px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form> <div class="input-field" style="width: 30%"> <label class="label-icon" for="pickup"><i class="material-icons">search</i> </label> <input id="pickup" placeholder="location" type="search" autocomplete="off" required> <ul class="suggestbox" id="sub_navlist"> <li>option 1</li> <li>option 2</li> <li>option 3</li> <li>option 4</li> <li>option 5</li> <li>option 6</li> <li>option 7</li> </ul> </div> </form> 

You can catch click event on document and if #pickup is active, show list: 您可以捕获文档上的单击事件,并且如果#pickup是活动的,则显示列表:

 $(document).on("click",function() { var num = $("ul.suggestbox").length; if (num > 0) { $(".suggestbox").toggle($("#pickup").is(":focus") || $(".suggestbox").is(":hover")); } }); 
 .suggestbox { overflow: auto; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); padding: 1px 1px; z-index: 1; display: none; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form> <div class="input-field" style="width: 30%"> <label class="label-icon" for="search"><i class="material-icons">search</i> </label> <input id="pickup" placeholder="location" type="search" autocomplete="off" required onkeypress="somefunction(platform, 'pickup')"> </div> <ul class="suggestbox" id="sub_navlist"><li>item1</li><li>item2</li></ul> </form> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM