3

我有一个字段,当您将焦点放在它上面时,它会更改页面的布局。我在提交表单的页面上也有按钮。

如果我进入我的字段并输入一个值,然后单击按钮,按钮单击事件永远不会触发。这似乎是因为布局在点击事件被触发之前发生了变化,这意味着按钮改变了位置。当点击事件触发时,它会在空白区域而不是按钮上触发。

这是问题的一个jsfiddle:http: //jsfiddle.net/xM88p/

我想出了一种为 IE 解决此问题的方法,但经过广泛研究后,我无法在 FF/Chrome 中找到/访问相同的对象:

//only works in IE

if(event.originalEvent.toElement){
  $("#"+event.originalEvent.toElement.id).click();
}
4

1 回答 1

1

http://jsfiddle.net/xM88p/2/

使用mousedown代替click

$("#btn_test").on('mousedown', function (event){
    alert("clicked!"); 
});

$('#test').focusout(function (event){
    $('<p>Test</p>').insertAfter(this);
});

编辑

好的,我对事件处理程序更有创意了。新的解决方案会跟踪 mousedown/mouseup 事件以及单击的位置。它使用这些值来检查鼠标向上是否应该执行警报。

var testClicked = false;
var lastX, lastY;

$(document).on('mouseup', function (event) {
    if (testClicked === true && lastX === event.clientX && lastY === event.clientY) {
        alert("clicked!"); 
    }
    testClicked = false;
    lastX = null;
    lastY = null;
});

$("#btn_test").on('mousedown', function (event){
    testClicked = true;
    lastX = event.clientX;
    lastY = event.clientY;
});

$('#test').focusout(function (event){
    $('<p>Test</p>').insertAfter(this);
});
于 2013-08-20T15:34:17.977 回答