2014-03-18 4 views
0

몇 가지 간단한 jQuery 코드가 있는데 문제가 있습니다. 메뉴 핸들러 함수가 전혀 작동하지 않습니다.jQuery에서 전역 함수 정의

$('.TemplateMaker').click(function(){ 
     if(clicked == false){ 
      $(this).after($TemplateMenu); 
      clicked = true; 
     } 
     else{ 
      $TemplateMenu.remove(); 
      clicked = false; 
     } 
    }); 
}); 

이 코드에 어떤 문제가 : 나는이 같은 키를 누른 상태에서 클릭() 안에 직접 넣어 경우 어떤 이유

var clicked = false; 
$(document).ready(function(){ 
    $TemplateMenu= $('<p class="paragraph">texxt</p>'); 
    $('.TemplateMaker').click(); 
     this.menuhandler(); 
    }); 
}); 
function menuhandler(){   
    if(clicked == false){ 
     $(this).after($TemplateMenu); 
     clicked = true; 
    } 
    else{ 
     $TemplateMenu.remove(); 
     clicked = false; 
} 

는 기능이 작동? 함수를 잘못 정의했거나 jQuery 요소가 함수에 포함되어 있다면 특별한 것이 필요합니까?

편집 :-) 도움을 감사합니다 :

나는 당신의 남자의 제안을 포함하는 코드를 편집의 회전식 문은 작동하지 않습니다. 코드 :

var clicked = false; 
$(document).ready(function(){ 
    $TemplateMenu= $('<p class="paragraph">texxt</p><p class="p2">texxt</p>'); 
    $('.TemplateMaker').click(menuHandler($(this))); 
}); 
function menuHandler(obj){   
    if(clicked == false){ 
     $(obj).after($TemplateMenu); 
     clicked = true; 
    } 
    else{ 
     $TemplateMenu.remove(); 
     clicked = false; 
}} 

나는 JQuery와 던질 것을 지금 notic이 "할 event.returnValue가되지 않습니다 표준에서는 event.preventDefault()를 대신 사용하십시오.."하지만 내 스크립트 방식의 접촉을 모르는 .

+1

무엇을 만드는 당신이 생각하는 당신의 일반 일반 직선 함수는 네이티브 DOM 요소에 연결 가능합니까? – adeneo

+4

'this.menuhandler()'가 아니라'menuhandler()'를 사용하여 호출하십시오. – Zhihao

+0

그래서 $ (this)가 무엇인지 알 수 있습니까? –

답변

1

누군가가 버튼을 클릭 할 때 menuHandler 기능이 실행되기를 원할 것입니다.

$('.TemplateMaker').click(menuHandler); 

편집 :

옵션 1 : 당신은 기본적으로 두 가지 옵션이 있습니다 다음과 같이 당신은 단순히 코드를 변경할 수 있습니다

시작할 필요가 없습니다은 $(this) 변화를 전달하기 위해 이 방법을 선택하는 경우 menuHandler 함수에서 매개 변수를 제거해야합니다.

$(document).ready(function(){ 
    $TemplateMenu= $('<p class="paragraph">texxt</p><p class="p2">texxt</p>'); 
    $('.TemplateMaker').click(menuHandler); 
}); 

옵션 2 :

가 아니면 $(this)을 전달하려면이 같은 (이 방법을 선택한 경우 menuHandler 함수에서 매개 변수를 유지)를 수행 할 수 있습니다

$(document).ready(function(){ 
    $TemplateMenu= $('<p class="paragraph">texxt</p><p class="p2">texxt</p>'); 
    $('.TemplateMaker').click(function() { 
     menuHandler($(this)); 
    }); 
}); 
+0

나는 당신의 해결책에 따라 질문을 편집한다 –

+1

나의 대답하는 대답을 보라, 이것은 일해야하거나 피들을 만들어야한다! – Dieterg

+0

옵션 2 작업, 감사. –

2
$('.TemplateMaker').click(); 
     this.menuhandler(); 
    }); 

this.menuhandler();를 대체하십시오.은 단지 입니다. menuhandler();은 다음과 같습니다 :

$('.TemplateMaker').click(); 
     menuhandler(); 
    }); 

편집 :를 귀하의 코멘트에 대응. 원래 코드의 menuhandler()에 $ (this) 대신을 사용해보십시오.

+0

작동하지 않습니다. 나는 그것이 더 이상 $이 무엇인지 모른다고 생각하기 때문에 그것이 효과가 있을지 모르겠다. –

+0

원본 코드의 ** menuhandler() **에서 ** ** (this) ** 대신 ** this **을 사용해보세요. –

+0

그게 그의 문제를 해결하지 못할 것입니다. 그는'$ ('. TemplateMaker')'를 클릭 할 때'menuhandler'가 호출되기를 원합니다. 그는 두 가지 옵션을 가지고 있는데,'$ (this) '참조를 매개 변수 호출로 전달하거나'click' 핸들러 내에서 함수를 직접 호출 할 수 있습니다. – Dieterg