我在IE9中遇到了一个奇怪的问题。防止在关闭colorbox的Colorbox中的输入元素上输入关键字(KeyCode 13)
如果我把一个输入元素放在一个colorbox(内联HTML)中,然后按回车,输入元素有焦点 - colorbox是否关闭?
这在Chrome中不会发生。
香港专业教育学院设置一个的jsfiddle演示此问题:
- 开放小提琴:http://jsfiddle.net/rv74f/3/
- 点击内嵌HTML链接
- 点击所产生的文本框,给它集中
- 新闻在键盘上输入 - Colorbox会淡出?
我不能在选项中看到任何东西来防止/解释这个beheviour?
如何防止在关闭所有输入元素上的按键事件时关闭colorbox?
我已经快速查看了colorbox源代码并注意到了诸如escKey: true,
之类的参数,但我无法看到任何解释此Enter键的问题?
编辑:
如果我添加以下内容publicMethod.close()
alert("caller is " + arguments.callee.caller.toString());
它告诉我,.close()是由publicMethod.close()
称为如果我添加了替代以下(注意使用caller.caller进一步向上移动堆栈):
alert("caller is " + arguments.callee.caller.caller.toString());
我得到如下:
---------------------------
Message from webpage
---------------------------
caller is
function(event) {
// Make a writable jQuery.Event from the native event object
event = jQuery.event.fix(event);
var i, ret, handleObj, matched, j,
handlerQueue = [],
args = core_slice.call(arguments),
handlers = (jQuery._data(this, "events") || {})[ event.type ] || [],
special = jQuery.event.special[ event.type ] || {};
// Use the fix-ed jQuery.Event rather than the (read-only) native event
args[0] = event;
event.delegateTarget = this;
// Call the preDispatch hook for the mapped type, and let it bail if desired
if (special.preDispatch && special.preDispatch.call(this, event) === false) {
return;
}
// Determine handlers
handlerQueue = jQuery.event.handlers.call(this, event, handlers);
// Run delegates first; they may want to stop propagation beneath us
i = 0;
while ((matched = handlerQueue[ i++ ]) && !event.isPropagationStopped()) {
event.currentTarget = matched.elem;
j = 0;
while ((handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped()) {
// Triggered event must either 1) have no namespace, or
// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
if (!event.namespace_re || event.namespace_re.test(handleObj.namespace)) {
event.handleObj = handleObj;
event.data = handleObj.data;
ret = ((jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler)
.apply(matched.elem, args);
if (ret !== undefined) {
if ((event.result = ret) === false) {
event.preventDefault();
event.stopPropagation();
}
}
}
}
}
// Call the postDispatch hook for the mapped type
if (special.postDispatch) {
special.postDispatch.call(this, event);
}
return event.result;
}
---------------------------
OK
---------------------------
所以colorbox.close()方法是由一个jQuery函数叫什么名字?现在我只需要弄清楚为什么....
神秘加深....
@HeavenCore然后添加[tag:internet-explorer-9]标签。 – SeinopSys 2013-04-10 13:55:12
检查这个小提琴http://jsfiddle.net/rv74f/4/,现在它在IE9中也能正常工作。它只是一个演示,你应该在keypress事件上调用一个函数并检查键码,如果按下的键是一个回车键而不是只返回false,否则目前你不能在输入字段中输入任何文本 – gaurav 2013-04-10 14:01:47
@gaurav干杯,但那会意味着为每个输入元素添加一个事件句柄 - 一个丑陋的解决方法,因为我将要加载的输入元素是多种多样的,并且由于各种原因可能拥有自己的事件句柄 - 这就是为什么我说“缺少捕捉所有按键事件我的输入元素“在我的问题。 – HeavenCore 2013-04-10 14:06:55