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.