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);
});

編集

さて、イベント ハンドラーをもう少し工夫しました。新しいソリューションは、マウスダウン/マウスアップ イベントとクリックの位置を追跡します。これらの値を使用して、マウスアップでアラートを実行するかどうかを確認します。

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 に答える