>웹 프론트엔드 >JS 튜토리얼 >js 함수에서 onmousedown과 onclick의 차이점과 연관성에 대한 토론_기본 지식

js 함수에서 onmousedown과 onclick의 차이점과 연관성에 대한 토론_기본 지식

WBOY
WBOY원래의
2016-05-16 17:33:381844검색

두 사건 모두 공통적이다.
이 두 이벤트의 차이점을 이해하지만 실제로 일부 작업을 수행하는 데 이 두 이벤트의 차이점을 사용하지 마세요.
일반적으로 onclick을 사용할 때 onmousedown을 사용할 수도 있으며, onclick을 사용할 때 더 자주 사용할 수 있습니다.
오늘은 온마우스다운을 사용해야 하는 경우가 있어서 여기에 기록해두겠습니다.

먼저 차이점에 대해 이야기하겠습니다: onclick은 마우스 클릭이 바운스된 후에 실행되는 이벤트입니다. onmousedown은 마우스를 누른 후 트리거되는 이벤트입니다.
간단히 onclick = onmousedown onmouseup이라고 말하면 됩니다.
한 곳에서 마우스를 누른 후 다른 곳에서 마우스를 놓으면 onmousedown 이벤트가 발생하지만 onclick 이벤트는 발생하지 않습니다.
오늘 구현하려는 기능은 a 태그를 클릭하여 다른 페이지로 전환하는 기능입니다. 원본 페이지가 닫히기 전에 해당 기능이 실행되어야 합니다. 창 언로드가 아닙니다.
onclick 이벤트는 이전에도 사용됐는데, IE에서 테스트할 때는 문제가 없었는데, FF에서 테스트해 보니 페이지가 소멸되기 전까지 이 함수가 실행될 시간이 없었던 것으로 나타났습니다.
onmousedown 이벤트를 사용하면 함수가 실행된다는 보장은 없지만 마우스가 튕긴 후에 점프가 실행되기 때문에 함수 실행을 위해 일정 시간을 벌게 됩니다.

해결책 1: onclick="return test()", 함수가 true를 반환하는 경우에만 점프가 실행됩니다. 이로 인해 새로운 문제가 발생합니다. 테스트 함수에서 멀티 스레드 프로그램이나 새로 열린 스레드 프로그램을 실행하면 먼저 true를 반환하고 점프하며 새로 열린 스레드는 실행되지 않습니다. 예를 들어 다음 함수는

코드 복사 코드는 다음과 같습니다.

함수 테스트 ()
{
(new Image()).src="1.html"
window.open("1.html","_new")
//alert(" ok");
return true;
}

1.html 파일에 를 설정했습니다. 1.html은 완전히 렌더링되기 전에 점프가 실행되지 않습니다. 새로운 이미지 기능의 실행이 보장되지는 않습니다.
단일 스레드를 사용하여 함수를 실행하는 경우 return test() 메서드를 사용할 수 있습니다.

해결책 2: 테스트 함수의 멀티스레드 기능의 최대 실행 속도를 추정하고 실행 시간을 100에 추가합니다. a 태그에 점프를 사용하지 마세요. 점프를 수행하려면 테스트 함수에서 setTimeout(location.href="1.html",100)을 사용하세요.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.