2010-06-28 4 views
0

나는 다양한 부분을 선택하기 위해 sizzle을 사용하고 있습니다.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 : 당신이 표현 effects.toggle를 호출하고 있기 때문에

<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 (예 : '토글 콘텐츠'및 '숨겨진 콘텐츠'요소)을 게시하면 도움이됩니다. – Pointy

+0

요청에 따라 HTML이 추가되었습니다. – JasonS

답변

1

이 있습니다. 실제로 함수를 바인드하여 호출하지 않아야합니다.

 
    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

그러면 자바 스크립트 오류가 발생합니다. '배열이 정의되지 않았습니다' – JasonS

+0

지금 수정되었습니다. 미안합니다! –

3

예 : 익명의 함수로 전달해야합니다.

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

이것은 원래 시도한 것입니다. 아무것도하지 않습니다. 오류가 없으며 브라우저에 경고가 표시되지 않습니다. annoymous 함수를 명명 된 함수로 옮길 때. 그럼. ('# toggle-content'). onmouseup = toggle(); 페이지가로드 될 때 여전히 트리거됩니다. – JasonS

+0

이렇게하는 경우 대괄호가 필요하지 않습니다. 따라서 익명의 함수를 사용하여 매개 변수를 전달할 수 있습니다. – matpol

관련 문제