2010-06-28 86 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