5

リスナーがアタッチされているリンクがあります (YUI を使用しています)。

YAHOO.util.Event.on(Element, 'click', function(){ /* some functionality */});

ユーザーのクリックを伴わない別のシナリオでも同じ機能を実現したいと考えています。理想的には、要素の「クリック」をシミュレートして、機能を自動的に起動させることができます。どうすればこれを行うことができますか? 残念ながらこれはうまくいきません:

$('Element').click()

ありがとう。

4

7 に答える 7

10

MDCには、dispatchEventを使用してクリックイベントをシミュレートする良い例があります。

何かがイベントをキャンセルしたかどうかもチェックする要素のクリックをシミュレートするコードを次に示します。

function simulateClick(elm) {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
  var canceled = !elm.dispatchEvent(evt);
  if(canceled) {
    // A handler called preventDefault
    // uh-oh, did some XSS hack your site?
  } else {
    // None of the handlers called preventDefault
    // do stuff
  }
}
于 2009-03-16T04:21:27.353 に答える
9

あなたはfireEvent(IE)とdispatchEvent(その他)を探しています。

YUI 3の場合、これはすべて次のようにうまくまとめられていY.Event.simulate()ます。

YUI().use("node", function(Y) {
    Y.Event.simulate(document.body, "click", { shiftKey: true })
})
于 2009-03-16T04:15:42.563 に答える
3

関数を個別に宣言できます。

function DoThisOnClick () {
}

次に、今と同じように onclick イベントに割り当てます。

YAHOO.util.Event.on(Element, 'click', DoThisOnClick)

そして、いつでも呼び出すことができます:-)

DoThisOnClick ()
于 2009-03-16T01:14:44.963 に答える
1

フレームワークに依存せずに HTML およびマウス イベントを発生させる方法を探している人がいる場合は、こちらをご覧ください: JavaScript を使用してマウス クリックをシミュレートする方法は?

于 2011-05-27T22:42:11.230 に答える
0

1) 最初の解決策

記事http://mattsnider.com/simulating-events-using-yui/では、YAHOO を使用してクリックをシミュレートする方法について説明しています。

var simulateClickEvent = function(elem) {
    var node = YAHOO.util.Dom.get(elem);

    while (node && window !== node) {
        var listeners = YAHOO.util.Event.getListeners(node, 'click');

        if (listeners && listeners.length) {
            listeners.batch(function(o) {
                o.fn.call(o.adjust ? o.scope : this, {target: node}, o.obj);
            });
        }

        node = node.parentNode;
    }
};

ご覧のとおり、関数はノードとその親をループし、それぞれに対してリスナーのリストを取得して呼び出します。

2) 2 番目の解決策

それを行う別の方法もあります。例えば:

var elem = YAHOO.util.Dom.get("id-of-the-element");
elem.fireEvent("click", {});

関数は次のように使用されます

3) 第三の解決策

YUI2 のバージョン 2.9 には、より優れたソリューションがあります: http://yui.github.io/yui2/docs/yui_2.9.0_full/docs/YAHOO.util.UserAction.html

4) 第四の解決策

YUI3 には、より優れたクリーンなソリューションもあります: http://yuilibrary.com/yui/docs/event/simulate.html

于 2014-08-30T17:33:12.637 に答える
-1

もちろん、$('Element').click() は機能しませんが、jquery を含めると、yui と一緒にうまく機能します。

私がテストしていないので、次のことを行う必要があります。

function myfunc(){
//functionality
}

YAHOO.util.Event.on(Element, 'click', myfunc);

次に、何か他のことが必要なときに myfunc を呼び出します。

于 2009-03-16T01:15:32.903 に答える
-4

任意の要素でのユーザー クリックをシミュレートできないのは意図的なものであり、明らかな理由があります。

于 2009-03-16T01:49:07.533 に答える