2009-11-12 4 views
3

jQuery를 사용하여 앵커 태그에 대한 클릭을 시뮬레이션하려고합니다. StackOverflow와 Google을 한동안 둘러 보았고 테스트중인 모든 브라우저에서 작동하는 것을 찾지 못했습니다. 지금까지, 나는이를 발견했습니다jQuery로 앵커 클릭을 시뮬레이트하는 브라우저 친화적 인 방법은 무엇입니까?

$(document).ready(function() { 
$.fn.fireEvent = function(eventType) { 
    return this.each(function() { 
     if (document.createEvent) { 
      var event = document.createEvent("HTMLEvents"); 
      event.initEvent(eventType, true, true); 
      return !this.dispatchEvent(event); 
     } else { 
      var event = document.createEventObject(); 
      return this.fireEvent("on" + eventType, event) 
     } 
    }); 
}; 

    $('a').fireEvent('click'); 
}); 

이 파이어 폭스 또는 내가 테스트 IE의 버전을 Safari에서 클릭 이벤트가 발생하지만,하지 않습니다. 그래서 오, 오, 내 마음이 잘못 됐어? 모든 지침은 크게 감사하겠습니다.

+0

달성하려는 목표는 무엇입니까? 링크를 따라 가거나 다른 이벤트를 실행하는 브라우저를 얻는 것입니까? – jammus

+0

나는 브라우저가 링크를 따라 가도록 노력하고있다. 너무 단순 해 보이지만 몇 시간 동안 비어있게되었습니다. 그래서 여기에 게시 할 것입니다. –

+0

about $ ('a') click (function() {location.href = this.href}). click(); ? 조금 바보 같지만 작동합니다. – jammus

답변

3

이 작동합니다 ...

$(function() { 

    fireClick($("a")[0]); 

}); 

function fireClick(elem) { 
    if(typeof elem == "string") elem = document.getElementById(objID); 
    if(!elem) return; 

    if(document.dispatchEvent) { // W3C 
    var oEvent = document.createEvent("MouseEvents"); 
    oEvent.initMouseEvent("click", true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, elem); 
    elem.dispatchEvent(oEvent); 
    } 
    else if(document.fireEvent) { // IE 
    elem.click(); 
    }  
} 
+0

방금 ​​시도했습니다. Mac에서는 Safari 4 또는 FireFox 3.0.11에 대한 사랑이 없습니다. –

+0

모든 경고가 발생하지만 DOM 클릭 자체가 테스트중인 브라우저 중 하나에 표시되지 않습니다. –

+0

OK 이벤트 디스패치를위한 W3C 표준을 구현 한 온라인에서 찾은 기능을 사용하기 위해 답변을 업데이트했습니다. 내가 할 수 없기 때문에 Firefox에서 이것을 시험해보십시오. –

3

사용 $('a').click();

+0

그러면 jQuery 클릭 이벤트 핸들러가 실행되지 않을까요? 나는 이벤트를 적절하게 발생 시키려면 기본 DOM 요소에 도달해야한다고 생각한다. 내 대답을 보라. –

+0

이것이 제가 시도한 첫 번째 것입니다. 사파리 4 나 파이어 폭스 3.0.11에서는 작동하지 않습니다. –

+1

-1 확인 : jQuery를 통해 앵커에 할당 된 이벤트 처리기 만 실행합니다. 사용자가 링크를 클릭하는 것을 시뮬레이트하지 않습니다. HREF로 리디렉션하지 않습니다. –

1

내가 크롬과 파이어 폭스에서이 테스트를하지만, IE 편리이 없습니다. 이것은 대부분의 시나리오에서 투명하게 작동해야합니다.

$('a').live('click.simclick', function(event){ 
    var $a = $(event.target) 
    setTimeout(function(){ 
     if (event.isPropagationStopped()) 
      return 

     $('<form/>') 
      .attr({ 
       method: 'get', 
       target: $a.attr('target'), 
       action: $a.attr('href') 
      }) 
      .appendTo(document.body) 
      .submit() 

      // clean up in case location didn't change 
      .remove() 
    }, 0) 
}) 

// test it 
$('a').eq(0).click() 
0

이 방법을 사용합니다. 괜찮은 것 같아.

$(function() { 
    fireClick($("a")); 
}); 

function fireClick (elem) { 
    window.location = $(elem).attr('href'); 
} 
관련 문제