복붙노트

[JQUERY] 나는 JQuery와 클릭 () 나는 바인딩과에 이벤트 처리기를 바인딩 이미 클릭하지 않은 경우 <A> 링크를 따라하기를 호출 할 수 있습니까?

JQUERY

나는 JQuery와 클릭 () 나는 바인딩과에 이벤트 처리기를 바인딩 이미 클릭하지 않은 경우 링크를 따라하기를 호출 할 수 있습니까?

해결법


  1. 1.재미있는, 이것은 아마도 jQuery를위한 "기능 요청"(즉, 버그)입니다. JQuery와 클릭 이벤트는 요소의 클릭 동작합니다 (DOM에 onClick 이벤트라고합니다)을 트리거 만약 당신이 바인딩 요소에 jQuery를 이벤트. 당신은 jQuery를 메일 링리스트로 이동 (http://forum.jquery.com/)이를보고해야합니다. 이 원하는 행동이 될 수도 있지만 난 그렇게 생각하지 않습니다.

    재미있는, 이것은 아마도 jQuery를위한 "기능 요청"(즉, 버그)입니다. JQuery와 클릭 이벤트는 요소의 클릭 동작합니다 (DOM에 onClick 이벤트라고합니다)을 트리거 만약 당신이 바인딩 요소에 jQuery를 이벤트. 당신은 jQuery를 메일 링리스트로 이동 (http://forum.jquery.com/)이를보고해야합니다. 이 원하는 행동이 될 수도 있지만 난 그렇게 생각하지 않습니다.

    편집하다:

    나는 몇 가지 테스트를했고, 무엇을 당신이 말한 것은 당신이 여전히 HREF 속성으로 지정된 웹 사이트로 이동하지 않는 'A'태그에 기능을 결합하는 경우에도 잘못된 것입니다. 다음 코드를 사용해보십시오 :

    <html>
    <head>
    
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
     <script>
      $(document).ready(function() {
       /* Try to dis-comment this:
       $('#a').click(function () {
        alert('jQuery.click()');
        return true;
       });
       */
      });
      function button_onClick() {
       $('#a').click();
      }
      function a_onClick() {
       alert('a_onClick');
      }
     </script>
    
    </head>
    <body>
     <input type="button" onclick="button_onClick()">
     <br>
     <a id='a' href='http://www.google.com' onClick="a_onClick()"> aaa </a>
    
    </body>
    </html> 
    

    직접 (또는 주석 코드없이) 링크를 클릭하지 않는 한 그것은 google.com으로 이동하지 않습니다. 이 링크에 클릭 이벤트를 바인딩 할 경우에도이 버튼을 클릭하면 또한 통지는 여전히 보라색하지 않습니다. 직접 링크를 클릭 경우에만 보라색 간다.

    제가 조사를 좀 해봤이 브라우저가 자바 스크립트를하지 suport "가짜의 클릭을"않기 때문에 .click '는'태그와 함께 작동하도록 생각하지 않는 것 같다. 난 당신이 자바 스크립트와 요소를 "클릭"할 수없는, 의미한다. 'A'태그를 사용하면 그 onClick 이벤트를 트리거 할 수 있지만, 링크 색상을 변경하지 않습니다 (방문한 링크 색상으로, 기본값은 대부분의 브라우저에서 보라색). 는 $를 만들기 위해 이해가되지 것입니다 그래서 (). HREF 특성에가는 행위는 onClick 이벤트의 일부가 아니므로 'A'태그 이벤트 작업을 클릭합니다,하지만 브라우저에서 하드 코딩.


  2. 2.또 다른 옵션은 사용 바닐라 자바 ​​스크립트에 물론입니다 :

    또 다른 옵션은 사용 바닐라 자바 ​​스크립트에 물론입니다 :

    document.getElementById("a_link").click()
    

  3. 3.당신은 내가 내기 할 것이다 기능 .click $의 코드를 보면 요소가 그것을 진행하기 전에 theclick 이벤트에 등록 된 리스너가 있는지 여부를 확인하는 것을 조건문이있다. 왜 그냥 링크에서 HREF 특성을 얻을 수 수동으로 페이지 위치를 변경?

    당신은 내가 내기 할 것이다 기능 .click $의 코드를 보면 요소가 그것을 진행하기 전에 theclick 이벤트에 등록 된 리스너가 있는지 여부를 확인하는 것을 조건문이있다. 왜 그냥 링크에서 HREF 특성을 얻을 수 수동으로 페이지 위치를 변경?

     window.location.href = $('a').attr('href');
    

    편집 :이 버전 1.3.2에 대한 트리거 기능, jQuery를 소스에서 클릭을 통해하지 않는 이유는 여기에 있습니다 :

     // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
        if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
            event.result = false;
    
        // Trigger the native events (except for clicks on links)
        if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
            this.triggered = true;
            try {
                elem[ type ]();
            // prevent IE from throwing an error for some hidden elements
            } catch (e) {}
        }
    

    이 (존재하는 경우) 핸들러를 호출 한 후 jQuery를 객체에 이벤트를 트리거합니다. 요소가 연결되지 않은 경우 그러나 그것은 단지 클릭 이벤트에 대한 기본 처리기를 호출합니다. 나는 이것이 어떤 이유로 의도적으로 이루어졌다 같아요. 이벤트 핸들러가 정의되지 않거나 여부를 불구하고이 이벤트 처리기를 부착 귀하의 경우 호출되는 네이티브의 onclick 핸들러를 발생하는 이유는 확실하지 않다, 그래서 진실해야합니다. 당신은 내가했고,이 호출되는 경우 실행 단계까지보고 무엇을해야 할 것이다.


  4. 4.앵커 태그에 클릭 핸들러는 jQuery를에 특별한 경우입니다.

    앵커 태그에 클릭 핸들러는 jQuery를에 특별한 경우입니다.

    난 당신이 앵커의 온 클릭 (브라우저에 의해 알려진) 이벤트 및 앵커 태그의 DOM의 개념을 래핑 jQuery 오브젝트의 클릭 이벤트 사이에서 혼란스러워지고 것 같아요.

    당신은 여기에 jQuery를 1.3.2 소스를 다운로드 할 수 있습니다.

    소스의 관련 부분은 선 2643-2645이다 (I가 이해하기 쉽도록 여러 줄이 밖으로 분할이) :

    // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
    if (
         (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && 
           elem["on"+type] && 
           elem["on"+type].apply( elem, data ) === false
       )
         event.result = false;
    

  5. 5.JS / jQuery를 프로그래밍 "클릭"링크의 기본 동작을 지원하지 않습니다.

    JS / jQuery를 프로그래밍 "클릭"링크의 기본 동작을 지원하지 않습니다.

    당신이 할 수있는 일은 양식을 작성하여 제출합니다. 자주 브라우저에 의해 원치 않는 팝업으로 차단에서는 window.location 또는 window.open을 사용하지 않아도 이쪽으로.

    링크 클릭에 사용자 정의 이벤트를 발생 하나 (이 만 1 IE와 크롬에서 더 아래 정보를 엽니 다) 시도 3 새 탭 / 창을 열 수있는 한 가지 :이 스크립트는 2 가지 방법이있다.

    여기 방법입니다 :

    <html>
    <head>
        <script src="jquery-1.9.1.min.js" type="text/javascript"></script>
        <script src="script.js" type="text/javascript"></script>
    </head>
    <body>
        <button id="testbtn">Test</button><br><br>
    
        <a href="https://google.nl">GOOGLE</a><br>
        <a href="http://en.wikipedia.org/wiki/Main_Page">WIKI</a><br>
        <a href="https://stackoverflow.com/">SO</a>
    </body>
    </html>
    
    $(function()
    { 
        // Try to open all 3 links by pressing the button
        // - Firefox opens all 3 links
        // - Chrome only opens 1 of them without popup warning
        // - IE only opens 1 of them WITH popup warning
        $("#testbtn").on("click", function()
        {
            $("a").each(function()
            {
                var form = $("<form></form>");
                form.attr(
                {
                    id     : "formform",
                    action : $(this).attr("href"),
                    method : "GET",
                    // Open in new window/tab
                    target : "_blank"
                });
    
                $("body").append(form);
                $("#formform").submit();
                $("#formform").remove();
            });
        });
    
        // Or click the link and fire a custom event 
        // (open your own window without following the link itself)
        $("a").on("click", function()
        {
            var form = $("<form></form>");
            form.attr(
            {
                id     : "formform",
                // The location given in the link itself
                action : $(this).attr("href"), 
                method : "GET",
                // Open in new window/tab
                target : "_blank"              
            });
    
            $("body").append(form);
            $("#formform").submit();
            $("#formform").remove();
    
            // Prevent the link from opening normally
            return false;
        });
    
    });
    

    그것이 무엇 각 링크 요소입니다 :

    지금 당신은 (그냥 교체, 또는 당신이 원하는 URL) 새 탭 / 창로드 "https://google.nl"가. 당신은 하나의 창이 방법보다 더 열려고 불행하게도 때, 당신은 두 번째 (첫 번째는 여전히 열)을 열려고 할 때 팝업이 messagebar을 차단 얻을.

    나는이 방법에 도착하는 방법에 대한 자세한 정보는 여기있다 :

    window.open 또는 window.location.href를 사용하지 않고 새 창 / 탭 열기


  6. 6.트리거 당신이 JQuery와 .click를 연결 시설 할 요소 내부에 하이퍼 링크 요소를 ()

    트리거 당신이 JQuery와 .click를 연결 시설 할 요소 내부에 하이퍼 링크 요소를 ()

    <div class="TopicControl">
        <div class="articleImage">
           <a href=""><img src="" alt=""></a>
        </div>
    </div>
    

    메인 컨테이너에 연결 시설 스크립트에서 당신의 클릭 이벤트를합니다. 그런 다음 요소 (유형, 클래스, ID)를 찾아 클릭을 해고 표준 JQuery와 방법론을 사용합니다. 무슨 일 JQuery와 재귀 함수가 클릭을 해고하고, 당신이 JQuery와 다른 작업을 수행하지만 링크를 해고하고 싶지 않기 때문에 당신이 경우 'E'와 인 stopPropagation () 함수 반환 거짓을 takeing하여 재귀 함수를 휴식에 들어갑니다.

    $('.TopicControl').click(function (event) {
             $(this).find('a').click();
            event.stopPropagation();
            return false;
         });
    

    다른 해결책은 소자 및 장소에서 용기를 포장하는 s '의 내부 용기로 대신 s'이. W3C 표준을 준수하는 디스플레이 블록에 스팬을 설정합니다.


  7. 7.당신은 그 요소의 jQuery 오브젝트를 선택 jQuery를 사용할 수 있습니다. 그런 다음, 기본 DOM 요소를 얻을 수와 클릭 () 메서드를 호출합니다.

    당신은 그 요소의 jQuery 오브젝트를 선택 jQuery를 사용할 수 있습니다. 그런 다음, 기본 DOM 요소를 얻을 수와 클릭 () 메서드를 호출합니다.

    ID로

    $("#my-link").each(function (index) { $(this).get(0).click() });
    

    또는 CSS 클래스에서 링크의 무리를 클릭 jQuery를 사용

    $(".my-link-class").each(function (index) { $(this).get(0).click() });
    

  8. 8.어떤 이벤트가 이벤트에 바인딩되지 않았다 때문에 아무것도하지 않습니다. 내가 올바르게 기억, jQuery를 성능과 다른 목적으로 NodeLists에 바인딩 이벤트 처리기의 자신의 목록을 유지 관리합니다.

    어떤 이벤트가 이벤트에 바인딩되지 않았다 때문에 아무것도하지 않습니다. 내가 올바르게 기억, jQuery를 성능과 다른 목적으로 NodeLists에 바인딩 이벤트 처리기의 자신의 목록을 유지 관리합니다.


  9. 9.당신은 하나의 케이스 또는 거의 casses이 기능을 필요로합니다. 차라리 그대로 jQuery를 떠날 것이다 (you'r 전체 응용 프로그램은이 기능을 필요로하지 않음) (최신 버전으로 업데이트 할 수있는 등 많은 이유로, CDN 등) 다음과 같은 해결 방법이 있습니다

    당신은 하나의 케이스 또는 거의 casses이 기능을 필요로합니다. 차라리 그대로 jQuery를 떠날 것이다 (you'r 전체 응용 프로그램은이 기능을 필요로하지 않음) (최신 버전으로 업데이트 할 수있는 등 많은 이유로, CDN 등) 다음과 같은 해결 방법이 있습니다

    // For modren Browsers
    $(ele).trigger("click");
    
    // Relaying on Paul Irish's conditional class names http://bit.ly/HWIpAp (via HTML5 Boilerplate http://bit.ly/HUzi3I) where each IE version gets a class of its Version
    $("html.ie7").length && (function(){
        var eleOnClickattr = $(ele).attr("onclick") 
        eval(eleOnClickattr);
      })()
    

  10. 10.같은 탭에서 열기 하이퍼 링크에 사용 :

    같은 탭에서 열기 하이퍼 링크에 사용 :

    $(document).on('click', "a.classname", function() {
        var form = $("<form></form>");
        form.attr(
        {
            id     : "formid",
            action : $(this).attr("href"),
            method : "GET",
        });
    
        $("body").append(form);
        $("#formid").submit();
        $("#formid").remove();
        return false;
    });
    
  11. from https://stackoverflow.com/questions/1694595/can-i-call-jquery-click-to-follow-an-a-link-if-i-havent-bound-an-event-hand by cc-by-sa and MIT license