0

我有一个使用 ajax 自动完成的文本输入字段。结果显示在带有垂直滚动条的 jScrollPane 面板中。

我遇到了一个特定于 IE 的问题,当用户单击 jscrollPane 下拉列表的滚动条时会触发输入字段的模糊事件(滚动条的向上和向下箭头生成为如下所示的锚标记)。

我的理解是 return false 应该阻止事件传播,我期望这就是为什么mousedownclick事件都为锚标签返回 false 的原因。这在 Firefox 和 Chrome 中运行良好,但在 IE 中不行。

虽然下面没有显示,但我也尝试在我的活动中使用以下代码,但无济于事:

    e.preventDefault ? e.preventDefault() : e.stop();
    e.returnValue = false;
    e.stopPropagation();

我想我的第一个问题是:

我是否应该期望停止对一种事件的传播以实际阻止其他类型的事件传播?

即,如果mousedown触发了返回 false 的事件,这会阻止触发模糊或聚焦事件吗?

如何解决此问题以确保 IE 与 Firefox 和 Chrome 一样工作?

var rf = function() { return false; };

$('<a></a>')
    .attr({'href':'javascript:;', 'className':'jScrollArrowUp'})
    .css({'width':settings.scrollbarWidth+'px'})
    .html('Scroll up')
    .bind('mousedown', function()
    {
        currentArrowButton = $(this);
        currentArrowDirection = -1;
        onArrowMouseDown();

        return false;
    })
    .bind('click', rf)

$("#InputBox").blur(function(e) {
    hasFocus = 0;
    if (!config.mouseDownOnSelect) {
        hideResultsNow();
    }
4

2 回答 2

0

仅在 IE 中对我来说同样的问题。

经过数小时的实验和谷歌搜索,我决定在模糊事件和动作之间使用微小的延迟(隐藏列表)。它为触发点击事件提供了时间。然后在单击事件处理程序中,您必须检查是否已安排延迟模糊事件处理,如果是,请取消该处理。

于 2011-12-31T02:15:10.103 回答
0

这已经晚了 3 年,但我刚刚发现实际上有一种方法可以让 IE ≤ 8 执行其他浏览e.preventDefault()mousedown中的操作(这会阻止选择阻止焦点):设置unselectable属性!http://jsbin.com/yagekiji/1

请注意,与总是建议的解决方法(包括此处的另一个)不同,它总是归结为setTimeout(function() { thingIDidntWantFocusStolenFrom.focus(); }),这首先可以防止焦点被mousedown目标窃取!

有趣的unselectable是它不是继承的,所以它经常被忽略以支持selectstart事件(哪个冒泡,并且e.preventDefault()阻止选择但阻止焦点),或者使用树遍历设置在每个后代元素上(比如StackOverflow 的答案首先让我知道这可能是可能的,或者 Tim Down 的一系列 几乎相同 答案),但您实际上可以将其设置为on 。 event.targetmousedown

(另外,jQuery 票:http ://bugs.jquery.com/ticket/10345 )

于 2014-04-30T19:22:18.267 回答