1

我在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函数叫什么名字?现在我只需要弄清楚为什么....

神秘加深....

+0

@HeavenCore然后添加[tag:internet-explorer-9]标签。 – SeinopSys 2013-04-10 13:55:12

+0

检查这个小提琴http://jsfiddle.net/rv74f/4/,现在它在IE9中也能正常工作。它只是一个演示,你应该在keypress事件上调用一个函数并检查键码,如果按下的键是一个回车键而不是只返回false,否则目前你不能在输入字段中输入任何文本 – gaurav 2013-04-10 14:01:47

+0

@gaurav干杯,但那会意味着为每个输入元素添加一个事件句柄 - 一个丑陋的解决方法,因为我将要加载的输入元素是多种多样的,并且由于各种原因可能拥有自己的事件句柄 - 这就是为什么我说“缺少捕捉所有按键事件我的输入元素“在我的问题。 – HeavenCore 2013-04-10 14:06:55

回答

0

这似乎已经固定 - 着重新创建颜色框v1.4.33发行(2013-10 -31)