2011-07-27 4 views
0

나는 처음으로 내 기능을 만들고 있습니다 $.fn.testing = function(){....};함수가 두 번 실행되지 않도록 방지

하지만 아직 해결할 수없는 문제가 있습니다.

$('.target').testing("message" : "Hello!"); 
$('#test .target').testing("message" : "Hello world!"); 

기능은 '메시지'팝업을 만들 것입니다 : 그게 내가 사용자가 필요가 없도록 그것을 해결하려는 이유는, 그래서 다음 시나리오는 스마트 아니지만, 그것은 일어날 수 . 그래서 사용자가 원하는 것은 .target마다 "Hello!"라는 팝업 상자가 있어야한다는 것입니다. 이 .target의 ID가 #test 인 경우 'Hello world!'라는 팝업이 표시됩니다. 그러나 문제는 스크립트가 "Hello!" 그리고 "Hello world!" .target#test이 트리거 될 때

그래서 내 함수에서 원하는 것은 함수가 이미이 객체에서 호출되었는지 여부를 확인하는 것입니다.이 함수가 이전 함수 인 경우 .unbind()이어야하며 함수를 계속 추가해야합니다.

내가 어떻게 이것을 달성 할 수 있습니까? 바라기를 나의 설명은 충분히 명확하다!

도움말이 감사합니다 (위의 예는 단순 조금, 그래서 그것의 사용에 대해 언급하지 마십시오입니다)!

$('.target#test').testing("message" : "Hello world!"); 
$('.target:not(#test)').testing("message" : "Hello!"); 

편집 -이 같은 뜻 :

답변

2

내가 이런 짓을 했을까하는 방법이다 다음은 예입니다. jsfiddle

+0

노력에 감사드립니다! 이것은 실제로 트릭을 할 것입니다! – Milaan

+0

ur wellcome ... 도움이 되셨 다행 (: – dugokontov

1

당신은 할 수 있을까? 내가 이해로

$('.target').testing(function(e){ 
    if (this.id === 'event'){ 
     alert('hello world'); 
    }else{ 
     alert('hello'); 
    } 
}); 
+0

정말 도움이되지만 사용자가이를 지정해야합니다. 함수 내부에서 이렇게하는 방법이 있습니까? – Milaan

+0

메인 포스트를 편집했는데 코드 비트를 봅니다. 어떻게 지금 얻으실 수 있습니까? 방법을 통해 주셔서 감사합니다 개봉 된 함수 안에 이것을 달성 할 수있는 방법이 없다면 이것을 사용할 것입니다! 감사! – Milaan

+0

더 자세한 예제를 제공해 주시겠습니까? 그렇지 않으면 함수의 코드를 보여 주듯이 달성하려는 대상을 정확하게 이해할 수 없습니다. 어쩌면 jsfiddle.net에 예제를 게시하십시오 –

0

지금까지이

var $this. msg; 
$('.target').each(function(){ 
    $this = $(this); 

    if((#this.attr("id) != "#test") || ($this.find("#test").length == 0))//here check for all the possible ids you want){ 
     msg = "message" : "Hello world!"; 
    } 
    else{ 
     msg = "message" : "Hello!"; 
    } 
    $this.testing(msg); 
}); 
+0

실제로 작동하지만, 나는 그것이 기능 자체 내에서 일어나길 원한다. 이것은 단순한 예제 일 뿐이지 만 좀 더 발전된 경우 다음과 같은 것을 사용해야 할 것입니다 :'$ ('.target'). filter (": not (#test # test1 # test2 # test3 # test4 # test5 # test6 # test7 # test8 # test9 # test10 etc) "). testing ("message ":"Hello! "); '메인 포스트를 편집했습니다. 코드 비트를 봅니다. 지금 어떻게 할 것입니까? 개봉 된 주셔서 감사합니다. – Milaan

+0

수정 된 답변이 도움이 되었기를 바랍니다. – ShankarSangoli

+0

감사합니다. 실제로 도움이 되겠지만'id '가'$ (this)'의 자식이라면 그렇게하지 않을 것입니다. 정말 정확한 질문이 아니 었습니다. 죄송합니다. 하지만 나는 이미 그것을 밖으로 figgered. 너를 도와 줘서 고마워! – Milaan

0

을 시도해보십시오 예를 들어 당신이 요소를 대상으로 추가 된 대상에 팝업이 이제 팝업을 대상으로 아이가, 또는 당신이 할 수있을 수 있습니다 그렇지 않으면 구현됩니다. 내 요점은 함수에 대한 호출이 만들어 질 때마다 팝업이 DOM에 삽입되었는지를 확인하는 것이다. 처음의 경우 팝업을 제거한 다음 새 메시지와 함께 새 팝업을 삽입합니다. 여기 :

는 플러그인에서
var _myFunction = function() { 
    alert($(this).data("message")); 
}; 

jQuery.fn.testing = function(msg) { 
    this 
     .data("message", msg) 
     .unbind('click', _myFunction) 
     .bind('click', _myFunction); 
}; 

편집과 같은 작업을 수행합니다

내가 좋아하는 말은 ... 여기

function() { 
     //if a pop is present 
     $('.popup').remove(); 

     var msg = $(this).attr('title'); //for example 
     var popup = "html containin msg..."; 
     $(this).append(popup); 
    } 
+0

도움을 주셔서 감사합니다! 그러나 나는 이미 그것을 가지고있다. 도움을 주셔서 감사합니다 – Milaan

0

이것이 올바른 방법인지는 모르겠지만 혼란 스럽습니다. 그것은 매우 쉽습니다, 당신은 자신의 기능의 시작 부분에 $(this).unbind()을 추가하십시오. 이전에 추가 된 모든 기능이 제거되고 현재 기능이 계속 추가됩니다. 전에 여분의 선택기로 시도 했었습니다 : $(this).unbind(".testing"), 어떤 이유로 작동하지 않았지만 지금은 작동하도록했습니다.

개봉 된 답변과 개봉 된 주셔서 감사합니다! 정말 감사합니다!

관련 문제