【问题标题】:JavaScript - Having trouble with a click eventJavaScript - 点击事件有问题
【发布时间】:2010-06-29 17:18:44
【问题描述】:

我正在使用 sizzle 来选择 DOM 的各个部分。

我的代码如下。问题是 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>

【问题讨论】:

  • 如果您发布一些您希望受此影响的 HTML(例如“toggle-content”和“hidden-content”元素)会有所帮助。
  • 按要求添加了 HTML。

标签: javascript sizzle onmouseup


【解决方案1】:

您需要将其作为匿名函数传递,例如。

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

【讨论】:

  • 这是我最初尝试过的。它什么也没做。浏览器中没有错误,也没有任何警报。当我将 annoymous 函数移动到命名函数时。然后有。 s('#toggle-content').onmouseup = toggle();它仍然在页面加载时触发。
  • 这样做你不需要括号 - 这就是你使用匿名函数以便传递参数的原因。
【解决方案2】:

这是因为您在表达式中调用了effects.toggle。您实际上应该绑定该函数以避免调用它。

函数绑定(){ var initArgs = 数组(参数); var fx = initArgs.shift(); var tObj = initArgs.shift(); var args = initArgs; 返回函数(){ 返回 fx.apply(tObj, args.concat(array(arguments))); }; } 函数数组(一){ 变量 r = []; for (var i = 0; i

【讨论】:

    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多