当输入失去焦点时,jquery关闭datepicker

use*_*586 14 jquery-ui datepicker jquery-plugins

我在输入中使用了datepicker,我的最后一个字段是datepicker输入,在验证之后我想将焦点设置在我的表单中的另一个输入,但问题是datepicker没有关闭,即使它没有焦点. .

当我将焦点设置在另一个输入字段上时,如何关闭日期选择器?(我试过.datepicker("隐藏");但它对我不起作用).

更新: 这是我的代码:

$(function()
    {    $( "#test_date" ).datepicker({
                dateFormat: "dd/mm/yy"
        });
        });
 //when i call my function:
 $( "#test_date" ).datepicker("hide"); //---> this does not work!
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Mar*_*k W 21

问题编辑使用最新版本的jqueryUI

当一个元素通过用户交互失去焦点时,JqueryUi会自动关闭datepicker,但在使用JS更改焦点时则不会.

如果你正在调用你的函数,它会从分配了一个datepicker的输入中删除焦点,你还需要调用:

 $("#test_date ~ .ui-datepicker").hide();
Run Code Online (Sandbox Code Playgroud)

此代码隐藏了datepicker,它是#test_date的兄弟(〜).

  • 如果单击下一个或上个月的按钮,这会导致日期选择器隐藏. (3认同)
  • jquery v1.11.2,jqueryUI v1.12.1,上面根本不起作用。`.ui-datepicker` 不再是同级元素,它被声明为 body 中的最后一个元素。 (2认同)

SpY*_*3HH 8

要动态,并使用jQueryui指定的类,您可以:

$(".hasDatepicker").on("blur", function(e) { $(this).off("focus").datepicker("hide"); });
Run Code Online (Sandbox Code Playgroud)

;(function() {
	function eventOnFocusDP(e, par) {
		if (par.ver == $.fn.jquery) {
			if (this.tmr) clearTimeout(this.tmr);
			par.lbl1.text(par.msgs[1]);
			this.tmr = setTimeout(function() { par.inpNP.focus(); }, par.secs*1e3);
		}
	}
	
	function eventOnFocusNP(e, par) {
		if (par.ver == $.fn.jquery) {
			par.lbl1.text(par.msgs[0]);
			par.lbl2.text(par.msgs[2]);
		}
	}
	
	function eventOnBlurNP(e, par) {
		if (par.ver == $.fn.jquery) par.lbl2.text("");
	}
	
	function eventOnBlurHDP(e, par) {
		if (par.ver == $.fn.jquery) {
			$(this).off("focus").datepicker("hide");
		}
	}
	
	function test(secs) {
		this.ver = $.fn.jquery;
		
		this.secs = (typeof secs)=='number'?secs:2;
		this.msgs = [
				'This will lose focus to box below '+this.secs+' seconds after it gains focus.',
				'Losing focus in '+this.secs+' seconds!',
				'Focus now on bottom box.'
			];
		
		this.inpDP = $('[name=datePicker]');
		this.inpNP = $('[name=nextPicker]');
		this.lbl1 = $('#dPMsg').text(this.msgs[0]);
		this.lbl2 = $('#dPMsg2');
		var par = this;
		
		this.inpDP.datepicker({ dateFormat: "dd/mm/yy" })
			.on('focus', function(e) { eventOnFocusDP.apply(this, [e, par]) });
		this.inpNP.on('focus', function(e) { eventOnFocusNP.apply(this, [e, par]) });
		this.inpNP.on('blur', function(e) { eventOnBlurNP.apply(this, [e, par]) });
		$(document).on('blur', '.hasDatepicker', function(e) { eventOnBlurHDP.apply(this, [e, par]) });
		return this;
	}
	
	function init() {
		window.Test = test;
		setTimeout(function() {
          $(document).on('change', '.switcher, .switcher-ui', function(e) { if (window.Test) new Test(); });
          $(jQueryUISwitcher).trigger('change');
        }, 1e3);
	}
	
	if (document.readyState == "complete") init();
	else jQuery(window).on('load', init);
})();
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/JDMcKinstry/cfc32292cbbfa548fb9584db05b2b2fc/raw/4f16f7ee441dfb98aa166a2e84193b14574a46d1/jquery.switcher.js"></script>
<form action="javascript: void 0">
  <input type="text" name="datePicker" id="dP" placeholder="mm/dd/yyyy" />
  <label for="dP" id="dPMsg"></label>
  <hr />
  <input type="text" name="nextPicker" placeholder="tab to here" />
  <label for="dP" id="dPMsg2"></label>
</form>
<hr />
<hr />
<hr />
Run Code Online (Sandbox Code Playgroud)

  • 如果单击下一个或上个月的按钮,这会导致日期选择器隐藏. (8认同)