3

特定のイベントオブジェクトとまったく同じプロパティをすべて含む、完全に別個の新しいイベントオブジェクトを作成するにはどうすればよいですかe。これまで私は次のことを試しましたが、運がありませんでした。

function myHandler(e) {
   // ...

   e = e.originalEvent;

   // method 1
   var e2 = jQuery.extend(true, {}, e);

   // method 2
   var e2 = JSON.parse(JSON.stringify(e));

   // ...
}

編集:明確にするために詳細を追加します。私がやろうとしているこの質問と非常によく似ていますdiv.dispatchEvent(e.originalEvent)が、そうすると次のようになります。

DISPATCH_REQUEST_ERR:DISPATCH_REQUEST_ERR:DOMイベント例外1

したがって、これを回避するには、イベントオブジェクトを複製する必要があります。ただし、このイベントオブジェクトは特定のオブジェクトではないため(つまり、、、、またはの場合もありますe)、特定のプロパティをハードコーディングするだけでなく、一般的なクローン作成関数を取得できれば簡単です。「運が悪い」とは、前述の方法を試して、ディスパッチ関数を介して送信すると、エラーが発生することを意味していました。これが少し明確になることを願っています。touchstarttouchmovetouchend

4

4 に答える 4

4

私はこのコードで「幸運」を経験しました:

$.extend($.Event(event.type /* click, mousedown, touchstart, ect. ect. */), {
    which: 1,
    clientX: event.clientX,
    clientY: event.clientY,
    pageX: event.pageX,
    pageY: event.pageY,
    screenX: event.screenX,
    screenY: event.screenY
});

明らかに、これがすべてです。ただし、実際に必要なものを他のオブジェクトに追加できます。実際にイベントを別の要素に転送しているため、ここで新しいイベントを作成します。


更新

私はjQueryTouchPunch Pluginを使用しています。これは、基本的にクリック/マウスイベントを関連するタッチイベント(touchstart、touchesmoved、touchend)にマップします。したがって、このイベントをマウスイベントとして転送すると、次のようになります。

var newEvent = $.extend($.Event(event.type), {
    which: 1,
    clientX: event.clientX,
    clientY: event.clientY,
    pageX: event.pageX,
    pageY: event.pageY,
    screenX: event.screenX,
    screenY: event.screenY
});

// touch punch will convert to a touch event if needed
$('.some-other-element').trigger(newEvent); 

ページにタッチパンチスクリプトを含めるだけです。これにより、jQueryUI要素がタッチデバイスで機能するようになります。

参照:

于 2012-09-24T20:39:58.577 に答える
2

ここでの答えは、「ネイティブイベントの引数を渡すだけです」というラベルが付いています。

function (e) {
    var $event = $.Event(e.type, e);
}

イベントタイプを変更する場合は機能しません。jQueryは、指定されたイベントタイプパラメーターを、渡されたイベントオブジェクトのイベントタイプに置き換えます。したがって、このアプローチは、イベントオブジェクトを正確に複製する手段としてのみ機能します。その際、イベントが厳密に複製されていることを示すセマンティックヒントとして、イベントタイプパラメーターの代わりにnullを使用することをお勧めします。

function (e) {
    var event = $.Event(null, e); // clone event
}

もちろん、クローン作成後はいつでもイベントのタイプ値を変更できます。

function (kind, e) {
    var event = $.Event(null, e); // clone event
    event.eventType = kind;

    return event;
}
于 2015-03-31T23:58:52.807 に答える
1

ネイティブイベント引数を渡すだけです

function (e) {
    var $event = $.Event(e.type, e);
}

手動で設定できるすべてのプロパティはネイティブイベント引数にすでに存在し、$.Event()コンストラクターはオブジェクトを2番目の引数として受け取るため、ネイティブイベント引数を単純に渡すことができます。

注:これを機能させるには、最初の引数としてイベントタイプを個別に渡す必要があります。そうしないと、jQueryはイベントオブジェクトをに格納するだけ$event.originalEventです。

于 2015-03-19T20:55:48.823 に答える
0
var eDemo = jQuery.Event("eventhandler", {
    target: e.currentTarget,
    relatedTarget: e.relatedTarget,
    pageX: e.pageX,
    pageY: e.pageY,
    which: e.which,    
});

var newObject = jQuery.extend(true, {}, eDemo);// deep copy

チェックアウトJqueryイベントコンストラクト-> http://api.jquery.com/category/events/event-object/

于 2012-09-24T20:51:51.500 に答える