2012-02-10 6 views
1

주 문제점 : 사용자가 anchor 태그를 클릭하면 #을 제거하십시오. 나의 현재 코드는 다음과JavaScript의`onClick` 이벤트 핸들러에`return false;`추가

<a href="#" onclick="javaScript:toggleDisplay();" title="Some Title"> 
    @ViewBag.TotalRecords 
</a> 

처럼 보이는 그리고 내가 가진 솔루션에 따라, 나는이

처럼 원하는 : 나는 onClick 핸들러에서 return false;을 추가하고 이에 대한 해결책,

이 차 문제 발견

<a href="#" onclick="javaScript:toggleDisplay();return false;" title="Some Title"> 
    @ViewBag.TotalRecords 
</a> 
  • 가 어떻게 내 자바 스크립트 함수 호출에 return false;를 추가 할 수 있습니다
      ? 나는 그것을 수동으로 할 수는 있지만 이것을 할 수있는 쉬운 방법이있다. jQuery를 사용하고 있습니까?
    • 현재 마크 업을 수정하지 않고 #을 제거하는 다른 방법이 있습니까?

    편집

    @ViewBag.TotalRecords :이 때문에 내가 태그에 넣어하지 않았다하는 MVC3 ASP.Net 일이지만,이 질문에 관련이 없습니다.

    감사합니다.

  • +0

    질문에 대해 더 자세히 설명해 주시겠습니까? – Shaheer

    +1

    'onclick = "javaScript : toggleDisplay();"'오류는 아니지만'javaScript :'접두사는 아마 당신이 생각하는대로하지 않을 것입니다. – Thilo

    +0

    @Shaheer, 첫 번째 코드 스 니펫을 사용하면 'toggleDisplay()'함수가 제대로 작동하지만 쿼리 문자열에'#'가 표시됩니다. 만약 내가'toggleDisplay(); 거짓을 돌려 준다. "그것은 거기에 없다. –

    답변

    2

    감사합니다. Phil으로 말씀 드렸듯이, 하나가 아니라 두 가지 해결책을 찾았습니다. 내가 (나중에 anchor 것이 별 것)

    jQuery를

    사용하여 일반 자바 스크립트 ( Unobtrusive JavaScript)

    document.addEventListener('click', function (e) { 
        e.preventDefault(); 
        return false; 
    }); 
    

    사용하여, 모든 click 처리기가 처리하는 JS 파일에 다음 코드를 추가하는 경우

    $(document).click(function (e) { 
        e.preventDefault(); 
        return false; 
    }); 
    

    jQuery 솔루션은 elclanrs에서 제안한 것과 약간 다릅니다. 의미에서, 내가 $('a').click(function(e){ e.preventDefault(); });을한다면, 그것은 anchor에 대해 작동하지만, 내 DOM을 수정하고 새로운 anchor을 추가하고,이 앵커를 클릭하면 쿼리 문자열에 #이 발생합니다.

    편집

    위의 솔루션은 모든 클릭도 내가 원하지 않는 핸들러를 거치게됩니다. 때문에 URL이 작동하지 않은으로 href이 정상 anchor의, 그래서 이것은 작업 솔루션이 다른 어떤 일을하는 데 도움이

    $("a").live("click", function (e) { 
        if ($(this).attr("href") != "#") return; 
        e.preventDefault(); 
        return false; 
    }); 
    

    희망을 것입니다.

    2

    jQuery를 사용하는 방법을 알고 계십니까? # 당신은 ... 그것을 제거하지 않는, 빈 링크를 의미

    $('a').click(function(e){ e.preventDefault(); }); 
    
    +0

    jQuery를 사용하여 자바 스크립트 기능을 바인딩하지 않습니다. –

    +0

    클릭 (function() {return false;}); ' – Phil

    +0

    새 jQuery 클릭 핸들러는 마크 업의 기존'onclick '과 어떻게 작동합니까? 변경하고 싶지 않다)? – Thilo

    4

    당신은 정말이에 대한 a 태그를 사용하지 말아야합니다 - 그것은 링크 역할을 아니에요; 자바 스크립트 버튼으로 작동합니다. 원한다면 CSS를 사용하여 링크 모양으로 표시 할 수 있지만 의미 상으로는 앵커가 아닙니다. 대신 <span class="toggle-display-button"></span> 또는 이와 유사한 것을 사용해보십시오. 이렇게하면 페이지 상단으로 스크롤하여 원하지 않는 부작용을 제거하고 지금 발생하는 URL에 #을 추가 할 수 있습니다.

    마크 업에 자바 스크립트를 넣는 것도 나쁜 습관입니다. jQuery의 .click 메소드를 사용하여 이벤트를 요소에 직접 바인딩 할 수 있습니다. 앞으로 페이지를 보거나 작동하는 방식을 변경하기로 결정하면 더 깔끔하고 유연 해집니다.

    +2

    왜 ''이 아닌 '

    +0

    나는 많은 것들을 할 수 있지만, 거의 모든 것 (90 %)은 필자의 마크 업이나 자바 스크립트 기능을 수정하는데 결국은 원하지 않는다. 10 %가 넘는 것이 있다면 도움이 될 것입니다. –

    +0

    @Phil - CSS에서 '버튼'모양을 링크로 만드는 것이 더 어렵습니다 (원하는 경우). 'span'은 게으른 남자의 선택이었다. –

    3

    당신은 당신의 HTML을 변경할 수 없습니다, 또는 클릭 이벤트를 연결하는 방법은, 당신은 항상 (#으로 업데이트 할 수있는 URL 원인이 무엇 인)를 통과에서 클릭을 차단할 수있는 경우 :

    $(document).on('click', 'a', function(e) { 
        if ('#' == $(this).attr('href')) 
         e.preventDefault(); 
    }); 
    

    당신은 정말로 리펙토링해야합니다, 18 페이지는 그리 많지 않습니다. 좋은 IDE를 사용하면 빠릅니다.

    +0

    +1 이것은 닫히고 회장 솔루션입니다. 감사. 그리고 예, 편집 작업을 할 수는 있었지만 적어도 지금은 새로운 것을 배울 수 있습니다 :)이 때문에 "closest",'document.addEventListener' 등을 배웠습니다. –

    관련 문제