, 나는 자바 스크립트 : 페이지의 모든 동작을 일시적으로 사용 중지하는 방법은 무엇입니까? 아약스 이벤트와 페이지에서
내가 현재의 onclick 이벤트에return false;
를 앞에 붙이는이 시도 (등을 제출 번 문제를 방지하기 위해) Ajax 호출이 반환 될 때까지 모든 작업을 비활성화 할 때 "잠금" 페이지를 제거하고 나중에 페이지를 "잠금 해제"할 때이를 제거하십시오. 그러나 액션은 "잠금 해제"된 후에 더 이상 활성화되지 않습니다. 단지 트리거 할 수 없습니다.
왜 작동하지 않습니까? 아래 예제 페이지를 참조하십시오. 내 목표를 달성하기위한 다른 아이디어?
예제 코드 :
링크와 버튼 모두 JS 경고를 표시합니다. 자물쇠를 누르면 이벤트 처리기의 잠금을 해제하는 것은 이전과 동일하지만 작동하지 않습니다 ...?!?
코드는 결국 트리니다 드와 함께 작동하도록되어 있지만 외부에서도 작동해야합니다. 여러분의 아이디어와 답변을
<html><head><title>Test</title>
<script type="text/javascript">
function lockPage()
{
document.body.style.cursor = 'wait';
lockElements(document.getElementsByTagName("a"));
lockElements(document.getElementsByTagName("input"));
if (typeof TrPage != "undefined")
{
TrPage.getInstance().getRequestQueue().addStateChangeListener(unlockPage);
}
}
function lockElements(el)
{
for (var i=0; i<el.length; i++)
{
el[i].style.cursor = 'wait';
if (el[i].onclick)
{
var newEvent = 'return false;' + el[i].onclick;
alert(el[i].onclick + "\n\nlock -->\n\n" + newEvent);
el[i].onclick = newEvent;
}
}
}
function unlockPage(state)
{
if (typeof TrRequestQueue == "undefined" || state == TrRequestQueue.STATE_READY)
{
//alert("unlocking for state: " + state);
document.body.style.cursor = 'auto';
unlockElements(document.getElementsByTagName("a"));
unlockElements(document.getElementsByTagName("input"));
}
}
function unlockElements(el)
{
for (var i=0; i<el.length; i++)
{
el[i].style.cursor = 'auto';
if (el[i].onclick && el[i].onclick.search(/^return false;/)==0)
{
var newEvent = el[i].onclick.substring(13);
alert(el[i].onclick + "\n\nunlock -->\n\n" + newEvent);
el[i].onclick = newEvent;
}
}
}
</script>
<style type="text/css">
</style>
</head>
<body>
<h1>Page lock/unlock test</h1>
<p>Use these actions to lock or unlock active elements on the page:
<a href="javascript:lockPage()">lock</a>,
<a href="javascript:unlockPage()">unlock</a>.</p>
<p>And now some elements:</p>
<a onclick="alert('This is the action!');return false;" href="#">link action</a>
<input type="button" value="button action" onclick="alert('This is another action!')"/>
</body>
</html>
고마워.
지금 나는 분명히 작동하지 않을 수 있습니다 문자열과 기능을 혼합 한 것을 볼 (
나는 우리가 이벤트 처리를 만드는 일부 웹 FW와 태그 라이브러리 (트리니다드)을 사용하는 것이 분명히해야(및 Ajax) 코드를 사용하므로 직접 편집하거나 동기식 Ajax 등을 사용할 수 없습니다.
또한 Ajax는이 코드를 실행해야하는 시나리오 중 하나입니다. page/action은 버튼에 doulbe-click을 할 수있는 non-Ajax 페이지와도 관련이 있습니다. 이건 정말 안전하지 않고 네비게이션을 얻지 못하게하는 "편의상"일뿐입니다. 오류 페이지 너무 자주 (우리는 서버 측 보호 기능을 가지고 있습니다.)
그래서 div 오버레이를 시도 할 것입니다.
다시 한 번 감사드립니다.
Christoph.
고마워,하지만 불행히도 작업 코드는 트리니다 드 프레임 워크에 의해 생성되며 나는 그것을 직접 변경할 수 없습니다. 그래서 JS를 사용하여 이벤트 핸들러 코드를 변경해야합니다. – ami
작업을 "줄 바꿈"할 수 있습니까? function thingo_wrap (e) { if (actions_disabled) false를 반환합니다. return original_thing () 위의 대체 제안 사항을 참조하십시오. – NickZoic
좋은 생각 ... 직접 할 수는 없지만 일부 JS를 사용하여 작업을 수정하십시오. 내 원래의 솔루션이 작동하지 않는 이유는 함수와 문자열을 섞어 놓은 것 같습니다. 맞습니까? 나는 그것을 시도 할 것이다. 또는지도를 사용하여 원래 작업을 저장하고 나중에 복원 할 수도 있습니다. – ami