我使用以下全局jQuery来显示和隐藏装载div的$.ajax电话:
div
$.ajax
$(document).ajaxStart(function(){ $("#loading").show(); } $(document).ajaxStop(function(){ $("#loading").hide(); }
这可以正常工作,但是我不想显示自动完成的加载div,所以我添加了以下内容:
$("input[type=text]").keydown(function(){ if($(this).hasClass('ui-autocomplete-input')) { window.suppressGlobal = true; } });
然后,要重置suppressGlobal“正常” $.ajax通话,请执行以下操作:
suppressGlobal
var origAjax = $.ajax; $.ajax = function() { if (window.suppressGlobal) { arguments[0].global = false; } origAjax.apply(this, arguments); window.suppressGlobal = false; };
所有这些对于使用页面加载构造的文本输入都很好。但是,在几种情况下,文本输入是使用jQuery / Javascript在客户端动态插入的,在这种情况下 ,keydown事件不会绑定到全局函数。我也尝试过on:
keydown
on
$("input[type=text]").on('keydown', function(){ if($(this).hasClass('ui-autocomplete-input')) { window.suppressGlobal = true; } });
但这也不起作用。有什么方法可以使我全局捕获keydown事件,而不管何时添加文本输入?我可以以某种方式全局捕获到DOM的文本输入的附加内容,然后附加事件处理程序吗?
您将必须使用$(document).on()动态创建的控件。
$(document).on()
jsfiddle:http : //jsfiddle.net/G9qJE/
您也可以使用: $('body').on
$('body').on
说明:分配事件后,该事件仅分配给页面上当前存在的元素。如果您以后再讨论其他元素,那么没有什么值得关注的,也可以通过监视这些元素来实现。这就是为什么您需要在文档级别上放置一些东西的原因,这些东西知道事件以及您想要将其应用到的元素,以便它可以监视匹配的任何新元素并将该事件也应用到它们。
$(document).on("keydown", "input[type=text]", function() { if($(this).hasClass('ui-autocomplete-input')) { window.suppressGlobal = true; } });