0

DOMのさまざまな部分を選択するためにsizzleを使用しています。

私のコードは以下の通りです。問題は、ユーザーがページを操作したときではなく、ページが読み込まれたときにonmouseupイベントがトリガーされることです。

誰かがこれがなぜであるか説明できますか?

ありがとう。

// Effects object
var effects = {
    // Display an object
    show : function(obj) {
        obj.style.display = 'block';
    },
    // Hide an object
    hide : function(obj) {
        obj.style.display = 'hide'; 
    },
    // Toggle
    toggle : function(obj) { 
        if (obj instanceof Array) {
            alert('array');
        } else {
            alert('single');    
        }
    }
}

// Selector Class
var s = Sizzle;

window.onload = function() {
    s('#toggle-content').onmouseup = effects.toggle(s('.hidden-content'));
}

要求に応じたHTML:

<div class="page-content box create-page">
    <h1><span class="left">Create Page</span><a class="right" id="toggle-content" href="#">Expand</a></h1>
    <div class="hidden-content">
        ...
    </div>
</div>
4

2 に答える 2

3

匿名関数として渡す必要があります。

window.onload = function() {
    s('#toggle-content').onmouseup = function(){effects.toggle(s('.hidden-content'));}
}
于 2010-06-28T11:37:50.920 に答える
1

それはあなたがeffects.toggle式を呼んでいるからです。関数を呼び出さないように、実際に関数をバインドする必要があります。

  関数bind(){
    var initArgs = array(arguments);
    var fx = initArgs.shift();
    var tObj = initArgs.shift();
    var args = initArgs;
    function()を返す{
      fx.apply(tObj、args.concat(array(arguments)));を返します。
    };
  }
  関数配列(a){
    var r = []; for(var i = 0; i <a.length; i ++)
      r.push(a [i]);
    rを返します。
  }

window.onload = function(){
    s('#toggle-content')。onmouseup = bind(effects.toggle、null、s('。hidden-content'));
}
于 2010-06-28T11:37:49.920 に答える