jquery를 통해 앵커 클릭을 어떻게 시뮬레이트 할 수 있습니까?


144

jQuery를 통해 앵커 클릭을 가짜로 만드는 데 문제가 있습니다. 입력 버튼을 처음 클릭 할 때 thickbox가 나타나는 이유는 무엇입니까?

내 코드는 다음과 같습니다.

<input onclick="$('#thickboxId').click();" type="button" value="Click me" />

<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>

링크를 직접 클릭하면 항상 작동하지만 입력 버튼을 통해 thickbox를 활성화하려고하면 작동하지 않습니다. 이것은 FF입니다. Chrome의 경우 매번 작동하는 것 같습니다. 힌트가 있습니까?


1
여기서 코드를 남기지 않습니다. Google에 표시 한 앵커의 클릭 이벤트와 관련된 코드가 없습니다. 그 코드는 무엇을합니까? 다른 코드가 있습니까?
— Matt

1
@Matt 매개 변수없이 click 메소드를 사용하는 경우 더 이상 이벤트 바인딩으로 해석되지 않으며, 실제로 연결된 요소를 마우스로 클릭하는 것처럼 클릭합니다. 이 경우 입력 요소를 클릭하면 ID가 'thickboxId'인 요소도 클릭해야합니다.
— KyleFarris 2009

3
@KyleFarris : click () 이벤트는 클릭 할 요소에 onclick 이벤트가 첨부되어 있지 않으면 Chrome 또는 Safari에서 작동하지 않으며 여전히 해당 부분 만 트리거하고 href 값으로 이동하지 않습니다. 위의 경우 사용자가 링크를 클릭 한 것처럼 A 태그의 href 속성으로 이동하기를 원합니다.
— Senseful

답변:


123

그런 jQuery 호출을 인라인하지 마십시오. 페이지 상단에 스크립트 태그를 넣어 click이벤트 에 바인딩하십시오 .

<script type="text/javascript">
$(function(){
    $('#thickboxButton').click(function(){
        $('#thickboxId').click();
    });
});
</script>

<input id="thickboxButton" type="button" value="Click me">
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>

편집하다:

링크를 실제로 클릭하는 사용자를 시뮬레이트하려는 경우 가능하지 않다고 생각합니다. 해결 방법은 버튼 click이벤트를 업데이트하여 window.locationJavascript 를 변경하는 것 입니다.

<script type="text/javascript">
$(function(){
    $('#thickboxButton').click(function(){
        window.location = $('#thickboxId').attr('href');
    });
});
</script>

편집 2 :

Thickbox가 사용자 정의 jQuery UI 위젯이라는 것을 알았으므로 여기 에서 지침을 찾았습니다 .

명령:

  • 링크 요소 만들기 ( <a href>)

  • 링크에 thickbox ( class="thickbox") 값을 가진 클래스 속성을 제공하십시오.

  • 에서 href링크의 속성을 다음과 앵커를 추가 :#TB_inline

  • 에서 href애프터 속성 #TB_inline추가 앵커에에서 다음 쿼리 문자열 :

    ? height = 300 & width = 300 & inlineId = myOnPageContent

  • 쿼리에서 높이, 너비 및 inlineId 값을 적절히 변경하십시오 (inlineID는 ThickBox에 표시 할 내용이 포함 된 요소의 ID 값입니다).

  • 선택적 #TB_inline?height=155&width=300&inlineId=hiddenModalContent&modal=true으로 ThickBox를 닫을 때 ThickBox tb_remove()내에서 함수를 호출하도록 modal = true를 쿼리 문자열 (예 :)에 추가 할 수 있습니다 . ThickBox를 닫으려면 예 또는 아니오를 클릭해야하는 숨겨진 모달 컨텐츠 예제를 참조하십시오.


클릭 핸들러의 window.location이 작동하지 않으므로 thickbox가 예상대로 작동하지 않습니다.
— prinzdezibel

두 번째 예 에서는 확인 된 URL을 얻는 .prop()대신 사용 하는 것이 좋습니다 attr().
— Kevin Bowersox

이것이 받아 들인 대답에 놀랐습니다. 클릭 트리거는 jQuery 래퍼 요소가 아닌 기본 DOM 요소에서만 작동합니다. 이것은 @Stevanicus 및 의견과 여러 다른 SO 게시물에서 논의됩니다. 답은 Stevanicus의 답변으로 변경해야합니다.
— Oliver

@ Schollii-원하는 정확성으로 편집하십시오.
— John Rasch

3
나는 대답이 @stevanicus의 답변이어야 함을 의미했다
— Oliver

194

나를 위해 일한 것은 다음과 같습니다.

$('a.mylink')[0].click()

1
. 다음 부분이 클래스 이름임을 기증합니다. #은 id입니다.
— Stevanicus

3
입력이 필요한 경우 focus대신 다음을 사용하십시오 click:)
— Andrius Naruševičius

이것은 나에게도 효과가 있지만 왜 작동합니까? $ ( 'a.mylink') [0] .click ()이 작동하지만 $ ( 'a.mylink'). eq (0) .click ()이 작동하지 않는 이유는 무엇입니까?
— ChrisC

4
[0]는 배열의 첫 번째 요소를 나타냅니다. 선택기는 실행될 때 0 개 이상의 요소를 반환합니다. 불행히도 .click()여기에서 직접 작동하지 않는 것 같습니다. 다른 호출이 프레임 워크 전체에서 일관되게 선택기의 요소 컬렉션에 적용되기 때문입니다.
— cfeduke

8
사용 [0]하거나 .get(0)동일합니다. 이들은 jQuery 버전 대신 요소의 DOM 버전을 사용합니다. .click()이 경우 함수는 jQuery를 클릭 이벤트하지만 기본 아니다.
— Radley Sustaire

19

최근 jQuery를 통해 마우스 클릭 이벤트를 트리거하는 방법을 찾았습니다.

    <script type="text/javascript">
    var a = $('.path > .to > .element > a')[0];
    var e = document.createEvent('MouseEvents');
    e.initEvent( 'click', true, true );
    a.dispatchEvent(e);
    </script>

1
문서에 createEvent 메소드가 없기 때문에 적어도 7 또는 8이 아닌 IE에서는 이것이 작동하지 않는다고 생각합니다.
— Jeremy

독수리가 말했듯이, 이것은 웹킷 브라우저에서 작동합니다. 그러나 실제로 $
— Query

1
이것은 마법의 절반이 빠졌습니다 : stackoverflow.com/questions/1421584/…
— daniloquio

9

이 접근법은 파이어 폭스, 크롬 및 IE에서 작동합니다. 그것이 누군가를 돕기를 바랍니다.

var comp = document.getElementById('yourCompId');
try { //in firefox
    comp.click();
    return;
} catch(ex) {}
try { // in chrome
    if(document.createEvent) {
        var e = document.createEvent('MouseEvents');
        e.initEvent( 'click', true, true );
        comp.dispatchEvent(e);
        return;
    }
} catch(ex) {}
try { // in IE
    if(document.createEventObject) {
         var evObj = document.createEventObject();
         comp.fireEvent("onclick", evObj);
         return;
    }
} catch(ex) {}

내 의견으로는 교차 호환성으로 인해 매우 유용하고 더 나은 옵션입니다. try / catch 블록으로 모든 것을 래핑하는 것을 좋아하지 않지만 각 브라우저에 대한 시도를 계단식으로 수행하는 것으로 이해합니다.
— h0r53

8

이것은 매우 오래된 질문이지만이 작업을 처리하기가 더 쉽다는 것을 알았습니다. 그것은 jquery UI 팀이 시뮬레이션이라는 jquery 플러그인입니다. jquery 뒤에 포함시킬 수 있으며 다음과 같은 작업을 수행 할 수 있습니다

<a href="http://stackoverflow.com/"></a>
$('a').simulate('click');

크롬, 파이어 폭스, 오페라 및 IE10에서 잘 작동합니다. https://github.com/eduardolundgren/jquery-simulate/blob/master/jquery.simulate.js 에서 다운로드 할 수 있습니다


주요 기능은 simulate()jQuery 이벤트 를 전송 하고 기본 브라우저 조치 를 트리거한다는 것입니다. 이것은 이제 정답입니다 +1
— 사라짐 코딩

매력처럼 작동하며 사용자가 내 검도 그리드의 버튼을 클릭하면 새 탭에서 페이지를 열 수 있습니다.
— John Sully

6

질문 제목은 "jQuery에서 앵커 클릭을 어떻게 시뮬레이트 할 수 있습니까?"입니다. "trigger"또는 "triggerHandler"메소드를 다음과 같이 사용할 수 있습니다.

<script type="text/javascript" src="path/to/jquery.js"></script>
<script type="text/javascript" src="path/to/thickbox.js"></script>
<script type="text/javascript">
$(function() {
    $('#btn').click(function() {
        $('#thickboxId').triggerHandler('click');
    })
})
</script>
...
<input id="btn" type="button" value="Click me">
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>

이 실제 스크립트는 테스트하지 않았지만 trigger이전에는 사용하지 않았 으며 실제로 작동했습니다.

UPDATE
triggerHandler 는 실제로 OP가 원하는 것을 수행하지 않습니다. 1421968 이이 질문에 대한 최상의 답변을 제공 한다고 생각 합니다.



4

나는 당신이 사용할 수 있다고 생각합니다 :

$('#yourLink').bind('click', function() {
  //Do something over here
});

$('#yourLink').trigger('click');

실제로 클릭하지 않고 클릭 기능을 쉽게 트리거 할 수 있습니다.


2

앵커 클릭을 가짜로해야합니까? thickbox 사이트에서 :

ThickBox는 링크 요소, 입력 요소 (일반적으로 버튼) 및 영역 요소 (이미지 맵)에서 호출 할 수 있습니다.

이것이 허용되는 경우 thickbox 클래스를 입력 자체에 배치하는 것만 큼 쉽습니다.

<input id="thickboxButton" type="button" class="thickbox" value="Click me">

그렇지 않은 경우 Firebug를 사용하고 앵커 요소의 onclick 메소드에 중단 점을 배치하여 첫 번째 클릭에서만 트리거되는지 확인하는 것이 좋습니다.

편집하다:

좋아, 나는 그것을 직접 시도해야했고 나에게 거의 정확하게 코드가 Chrome과 Firefox에서 모두 작동했다.

<html>
<head>
<link rel="stylesheet" href="thickbox.css" type="text/css" media="screen" />
</head>
<body>
<script src="jquery-latest.pack.js" type="text/javascript"></script>
<script src="thickbox.js" type="text/javascript"></script>
<input onclick="$('#thickboxId').click();" type="button" value="Click me">
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>
</body>
</html>

입력 또는 앵커 요소를 클릭해도 창이 팝업됩니다. 위의 코드가 효과가 있다면 오류가 다른 곳에 있고 문제를 격리하려고 시도하는 것이 좋습니다.

또 다른 가능성은 다른 버전의 jquery / thickbox를 사용하고 있다는 것입니다. thickbox 페이지-jquery 1.3.2 및 thickbox 3.1에서 얻은 것을 사용하고 있습니다.


예, 가짜로 처리해야하며 클릭 핸들러 자체가 작동합니다. 그러나 실제로 onclick 이벤트를 전혀 설정하지 않았으며 처음으로 작동합니다. 또한 thickboxId에서 onclick을 처리하면 작동하지 않습니다.
— prinzdezibel

의미는 입력 요소를 클릭 할 때마다 앵커 요소의 onclick이 트리거되는지 확인하는 것이 었습니다. 오, 위의 편집 내용을 참조하십시오.
— waxwing

2

jQuery를 통해 또는 링크 href를 모방하는 동작으로 HTML 페이지 코드에서 양식을 작성할 수 있습니다.

<a id="anchor_link" href="somepath.php">click here</a>.

var link = $('#anchor_link').attr('href');
$('body').append('<form id="new_form" action="'+link+'"></form>');
$('#new_form').submit();

이 방법을 사용하면 단순히 앵커로 이동하지 않고 전체 페이지가 다시로드됩니다. 또한 "?"를 추가합니다. URL로 페이지가되도록 example.com?#test 대신에 example.com # 테스트 . Chrome 및 Safari에서 테스트되었습니다.
— Senseful

FF에서 이것은 잘 작동합니다. Webkit 브라우저에서 Senseful에 설명 된대로 URL을 얻습니다. 그러나 이것은 문제가되지 않습니까?
— sdepold

2

페이지에 방문하는 동안 앵커 클릭을 시뮬레이트하기 위해 jQuery를 사용하여 scrollTop 속성에 $(document).ready.복잡한 트리거가 필요하지 않으며 IE 6 및 다른 모든 브라우저에서 작동합니다.


2

JQuery를 사용할 필요가 없다면 필요하지 않습니다. 의 크로스 브라우저 기능에 문제가 있습니다 .click(). 그래서 나는 사용합니다 :

eval(document.getElementById('someid').href)

빠르고 더럽지 만 나를 위해 일했습니다. jQuery에서 이것은 eval ($ ( "# someid"). attr ( "href"));
— mhenry1384

2

Javascript에서는 다음과 같이 할 수 있습니다

function submitRequest(buttonId) {
    if (document.getElementById(buttonId) == null
            || document.getElementById(buttonId) == undefined) {
        return;
    }
    if (document.getElementById(buttonId).dispatchEvent) {
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        document.getElementById(buttonId).dispatchEvent(e);
    } else {
        document.getElementById(buttonId).click();
    }
}

그리고 당신은 그것을처럼 사용할 수 있습니다

submitRequest("target-element-id");

1

Jure의 스크립트를 사용하여 원하는만큼 많은 요소를 쉽게 "클릭"할 수있었습니다.
1600 개 이상의 항목에서 Google 리더를 사용했으며 Firefox에서 완벽하게 작동했습니다!

var e = document.createEvent('MouseEvents');
e.initEvent( 'click', true, true );
$(selector).each(function(){this.dispatchEvent(e);});

문서에 createEvent 메소드가 없기 때문에 적어도 7 또는 8이 아닌 IE에서는 이것이 작동하지 않는다고 생각합니다.
— Jeremy Jeremy

IE에서 document.createEventObject ()를 대신 사용해야한다고 생각하지만 시도하지는 않았습니다.
— fregante

@ bfred.it : createEventObjectIE에서 합성 이벤트를 전달하는 대신 처리기에 전달할 이벤트 객체를 만드는 것이 더 많은 것 같습니다 . IE fireEvent는에 더 가까울 수 dispatchEvent있지만 기본 브라우저 동작이 아닌 리스너 만 트리거합니다. 그러나 IE에서는 click메소드를 호출 할 수 있습니다 .
— theazureshadow

1

JQuery('#left').triggerHandler('click');Firefox 및 IE7에서 잘 작동합니다. 다른 브라우저에서 테스트하지 않았습니다.

자동 사용자 클릭을 트리거하려면 다음을 수행하십시오.

window.setInterval(function() 
    {
        $('#left').triggerHandler('click');
    }, 1000);

1

"숨겨진 입력 (파일) 요소"를 클릭하기 위해 Android 기본 브라우저에서 작동하지 않습니다.

$('a#swaswararedirectlink')[0].click();

그러나 이것은 작동합니다.

$("#input-file").show();
$("#input-file")[0].click();
$("#input-file").hide();

0

jQuery UI 스피너를 사용하여 단위 테스트에서 '클릭'을 시뮬레이션하려고 할 때 이전 답변을 얻을 수 없었습니다. 특히, 아래쪽 화살표를 선택하는 '스핀'을 시뮬레이션하려고했습니다. jQuery UI 스피너 단위 테스트를 살펴본 결과 다음과 같은 방법을 사용했습니다.

element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.