2012-01-13 2 views
6

나는 참 또는 거짓 반환 FUNC2이JQuery와 HREF 및 onclick을 분리

<a id="id101" href="javascript:func1();" onclick="return func2();">Link</a> 

같은 코드가 있습니다. 그런 다음 func1은 function2가 true를 반환 할 때만 호출됩니다. 권리 ? 학습 JQuery와에

, 나는 그 온 클릭이 좋지 않아 발견 및 감가 상각, 그래서 지금

<a id="id101" href="javascript:func1();">Link</a> 
jquery 
$("#id101").click(func2() { 
    //same stuffs from before which was in func2 
}); 

에 위의 코드를 수정, 내 질문은 : 클릭 핸들러가 촬영

후 관심, 내가 href 내부에서 JavaScript로 무엇을 할 수 있습니까? func2 내부의 조건이 true 일 때 func2의 jQuery 클릭 핸들러에서 func1을 func2 내에서 호출해야합니까? 아니면 우아한 해결책이 있습니까?

또한 HTML과 이벤트 코드를 구분하는 것이 좋지만 여기서는 id가 id101 인이 요소에 많은 이벤트가 연관 될 수 있으며 큰 파일에는 많은 이벤트가있는 많은 HTML 요소가있을 수 있습니다. 그래서, 많은 이벤트 핸들러가있는 큰 페이지가있을 때, 어떻게 html 요소가 어떤 것인지, 얼마나 많은 이벤트가 연관되어 있는지 더 잘 알 수 있습니까? 요청에 따라 위의 질문에 대한

자세한 설명,

내가 id101이 onMouseover와, onmouseout 및 기타 여러 이러한 이벤트, 온 클릭 할 수 있습니다 의미했다. 이러한 많은 이벤트 핸들러에는 많은 요소가있을 수 있습니다. 어떻게 그들을 더 잘 보이게 할 수 있습니까? 예전 스타일에서는 이와 같은 모든 이벤트 핸들러가 함께 배치됩니다 (예 :

<a id="id101" href="javascript:func1();" onclick="return func2();">Link</a>).

나는 이것이 좋다고 말하는 것은 아니지만 적어도이 onclick 이벤트가 있음을 알 수 있습니다. 하지만 이제 이것을 jquery 파일로 분리 할 때 id101에 대해이 jquery 파일을 먼저 검색 한 다음 관련 요소를 확인해야합니다.이 요소는 많은 요소와 관련 이벤트 처리기가있는 html 파일에 문제가 될 수 있습니다. 그 정보를 찾는 더 좋은 방법이 있습니까?

+0

http://jsfiddle.net/zzTSt/1/ 모두에서 "HREF"에서 자바 스크립트를 넣지 마십시오. 원하는 경우 이벤트 처리기에서 (조건부로) 수행하십시오. – Pointy

+0

@endroix : Pointy가 말했듯이, 전체'href' 속성 만 제거하십시오. 인라인 JS는 나쁜 소식입니다. 그리고 jQuery 셀렉터로 바인드 할 때는 ID를 나타 내기 위해 '#'을 사용해야합니다. 지금 당신의 jQuery는 아무것도하지 않을 가능성이 큽니다. '$ ("# id101"). click();'으로 변경하고'href = "x"'전체를 제거하십시오. – Josh

+0

@Josh, 나는 그것을 잊었다. 지금 업데이트 됨 – newcoderintown

답변

2

예, func2를 func2로 작성하는 것이 좋습니다. HTML :

$("#id101").click(func2() { 
    var status = false; 
    //func2 goes here and modifies status value. 
    if (status) { 
     // func1 goes here 
    } else { 
     // in case if status is false. 
    } 

}); 

<a id="id101" href="#" >Link</a> 

jQuery를 또한 당신이 더 구체적으로하시기 바랍니다 수, 당신은 당신의 질문의 두 번째 부분에 의미를하지 않았다.

+2

'#'을 해당 jQuery 선택기에 추가하지 않으면 아무 것도 작동하지 않습니다 ... – Josh

+0

사실상 이론적으로 이벤트와 핸들러에는 제한이 없습니다. 그들을 위해 핸들러를 만드십시오. 클래스 대신에 ID를 사용할 수 있다고 생각합니다. 자바 스크립트 핸들러가 있어야하는 많은 링크가 있다면, 그들을 수집하려고합니다. 'Link Link 2'과 같이 모든 질문에 특정 작업을 수행해야하는 경우 클릭 한 링크를 식별하는 다른 속성을 사용하는 것이 좋습니다. ' Cyberon

+0

으로 가져오고 이것을 클릭하여 페이지를 "호핑"하지 않으려면 링크 ("#"를 참조하기 때문에) 대신 링크'같은 것을 사용할 수 있습니다. 이 스팬의 스타일은 링크처럼 보입니다. – odaa

2

내가 말할 수있는 가장 좋은 점은이 코드가 "냄새 나는"코드라는 것입니다. 자바 스크립트를 이와 같이 마음대로 사용하고 싶지는 않습니다. 몇 시간 동안 jQuery의 기초를 배우고 그 곳으로 이동하는 것이 좋습니다. 레거시 자바 스크립트로 작업하는 경우 특히 실망 스러울 수 있습니다.

+0

나는 지금 jQuery를 배우고있다. 감사합니다 – newcoderintown

9

제대로 이해했다면 인라인 자바 스크립트는 피하고 싶지만 a을 볼 수 있고 이벤트가 바인딩되어 있는지 알고 싶을 수도 있습니다. 안타깝게도 인라인 자바 스크립트는 나쁜 소식이기 때문에이를 나타낼 수있는 방법이 없습니다. 아마도 미래의 가독성을 돕기 위해 요소를 더미 클래스로 제공 할 수 있습니다. 그것 이외에, 전체 func1func2 것을 잊어 버려라. 클릭 바인딩 내에서 익명의 함수를 사용하기 만하면됩니다.

<a id="some_id" class="optional_has_click">Click Me</a> 

<script type="text/javascript"> 
    $(document).ready(function(){ 

    $("#some_id").click(function(){ 

     // do something 
     alert($(this).attr("id")); 

    }); 

    }); 
</script> 

편집 : 당신이이 a처럼 보이게하기 위해 더미 클래스를 사용할 수 있도록 또한, href를 제거하면, 시각적 큐를 제거합니다. 여기

당신을위한 바이올린입니다 :

+0

예, 인라인 JS를 피하고 싶지만 'a'와 관련된 이벤트도 볼 수 있습니다. 이 func1과 func2를 여러 곳에서 사용해야하는 경우 익명 함수로이 작업을 수행 할 수 있습니까? – newcoderintown

+0

@endroix : 익명의 함수를 호출하면 지금 경고하고 있습니다. – Josh

+0

@endroix : 나는 당신을 위해 바이올린을 업데이트했습니다. – Josh