2010-06-28 60 views
0

我正在使用sizzle來選擇DOM的各個部分。JavaScript - 單擊事件時遇到問題

我的代碼如下。問題在於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> 
+0

如果您發佈了一些您想要受此影響的HTML(例如「toggle-content」和「hidden-content」元素),這將有所幫助。 – Pointy 2010-06-28 12:30:59

+0

按要求添加了HTML。 – JasonS 2010-06-28 13:09:48

回答

1

這是因爲你在打電話表達effects.toggle。您應該實際綁定該函數以避免調用它。

 
    function bind() { 
    var initArgs = array(arguments); 
    var fx =  initArgs.shift(); 
    var tObj =  initArgs.shift(); 
    var args =  initArgs; 
    return function() { 
     return fx.apply(tObj, args.concat(array(arguments))); 
    }; 
    } 
    function array(a) { 
    var r = []; for (var i = 0; i < a.length; i++) 
     r.push(a[i]); 
    return r; 
    } 

window.onload = function() { 
    s('#toggle-content').onmouseup = bind(effects.toggle, null, s('.hidden-content')); 
} 
+0

這會觸發一個javascript錯誤。 '數組未定義' – JasonS 2010-06-28 12:16:53

+0

現在已修復。對於那個很抱歉! – 2010-06-29 09:18:53

3

你需要通過它作爲一個匿名函數,例如。

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

這是我最初嘗試過的。它什麼都不做。在瀏覽器中沒有錯誤和警報。 當我將惱人的功能移到一個命名函數。然後有。 s('#toggle-content')。onmouseup = toggle(); 頁面加載時仍會觸發。 – JasonS 2010-06-28 12:16:14

+0

像這樣做,你不需要括號 - 這就是爲什麼你使用匿名函數,所以你可以傳遞參數。 – matpol 2010-06-29 07:48:27