복붙노트

[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 Internet Explorer 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.자바 스크립트 / jQuery를 프로그래밍 "클릭"링크의 기본 동작을 지원하지 않습니다.

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

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

    (자세한 내용은 아래, 그것은 인터넷 익스플로러와 크롬에서 하나를 엽니) 및 링크 클릭에서 사용자 정의 이벤트를 발생 한 시도는 세 개의 새로운 탭 / 창을 열 수있는 한 가지 :이 스크립트는 두 가지 방법이있다.

    여기 방법입니다 :

    <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 three links by pressing the button
        // - Firefox opens all three links
        // - Chrome only opens one of them without a popup warning
        // - Internet Explorer only opens one of them WITH a 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을 차단 얻을.

    나는이 방법에 도착 방법에 대한 자세한 내용은 여기있다 :


  6. 6.당신은 그 요소의 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() });
    

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

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

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

    메인 컨테이너에 연결 시설 스크립트에서 당신의 클릭 이벤트를합니다. 그런 다음 요소 (유형, 클래스 및 ID)를 찾아 클릭을 발사하는 표준의 jQuery 방법을 사용합니다. jQuery를이 클릭을 발사 할 수있는 재귀 함수를 입력하고 당신이 jQuery를 다른 작업을 수행하지만 링크를 해고하고 싶지 않기 때문에 당신은 이벤트 'E'와 인 stopPropagation () 함수 반환 거짓을 고려하여 재귀 함수를 휴식.

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

    다른 해결책은 소자와 장소에서 용기를 포장하는 S '컨테이너 내부 대신


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

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


  9. 9.당신이 한 경우 또는 매우 적은 경우에이 기능이 필요한 경우 (전체 응용 프로그램은이 기능을 필요로하지 않음). 차라리 (최신 버전, CDN 등으로 업데이트 할 수있는 등 많은 이유로)와 같이 jQuery를두고 다음과 같은 해결 방법을 것이다 :

    당신이 한 경우 또는 매우 적은 경우에이 기능이 필요한 경우 (전체 응용 프로그램은이 기능을 필요로하지 않음). 차라리 (최신 버전, CDN 등으로 업데이트 할 수있는 등 많은 이유로)와 같이 jQuery를두고 다음과 같은 해결 방법을 것이다 :

    // For modern browsers
    $(ele).trigger("click");
    
    // Relying on Paul Irish's conditional class names,
    // <https://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/>
    // (via HTML5 Boilerplate, <https://html5boilerplate.com/>) where
    // each Internet Explorer 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-jquerys-click-to-follow-an-a-link-if-i-havent-bound-an-event-ha by cc-by-sa and MIT license