2011-03-08 4 views
1

안녕 모두자바 스크립트 반환 false가 작동하지 않습니다.

내 JSP에 다음 줄이 있습니다.

<s:submit name="submit" onclick="return validateUser();" action="saveUser" theme="simple" value="Save" /> 

java 스크립트 메소드 validateUser()는 사용자의 유효성을 검사하고 true 또는 false를 반환합니다. 유효성 검사가 실패하면 양식을 제출해서는 안됩니다.

이것은 FF에서는 작동하지만 IE8에서는 작동하지 않습니다.

IE8은 유효성 검사가 실패한 후에도 양식을 제출합니다.

+0

IE이 오류 메시지를 제공합니까? – JohnP

+1

시도해보십시오 onclick = "javascript : void (0); return validateUser();" –

+0

아니요, IE는 오류 메시지를 제공하지 않습니다. 양식이 제대로 제출됩니다. – ashishjmeshram

답변

1

먼저 참으로 보여지는 오류를 반환 할 수 있습니다, 여러 작업을 수행 할 수있는 하나의 형태는 나쁜 말했다 아이디어, ...

대신, 전송 버튼을 사용하지 마십시오

<button type="button" onclick="javascript:validateUser();">Save user</button> 
<button type="button" onclick="javascript:deleteUser();">Delete user</button> 

지금 당신은 단지 형태 (사용자 프레스 필드에 입력 할 때)의 동작을 제출 기본에 대해 걱정할 필요가.

+0

'javascript :'는 필요 없습니다 - onclick은 기본값 인 javascript입니다 - 왜 나쁜 생각입니까? 눌러 진 제출의 이름/값 쌍이 서버로 전달됩니다. 즉, 테스트해야하는 곳입니다. – mplungjan

+0

이것이 저에게 효과적입니다. 감사 ! – ashishjmeshram

+0

@mplungjan 폼이 단일 액션 인터페이스이기 때문에 나쁜 (디자인) 아이디어입니다. 자바 스크립트를 통해 폼에 액션을 추가하면 불필요한 복잡성과 자바 스크립트 의존성이 추가됩니다. Onclick은 실제로 기본값 당 javascript입니다. 그러나 javascript : 접두사를 포함하는 것이 좋지 않습니다. 주로 더러운 인라인 자바 스크립트가 사용되고 자바 스크립트 : 접두어가 유지 관리를 훨씬 쉽게 감지합니다. 또한 버튼의 키/값 쌍 (mplungjan 's assumption)에 의존하는 코드를 작성하는 것은 다시 말하면 더 불필요한 복잡성을 초래하는 밝은 아이디어가 아닙니다. – BGerrissen

3

제출 버튼을 취소하고 대신 양식에 javascript 변수 또는 숨김 필드를 설정하고 onsubmit을 사용할 수 있다고 가정하지 마십시오. 그것에 대해 내 말을 들어라. 다른 제출 버튼에 의해 설정된 변수를 계속 확인하십시오. IE에 있고 페이지의 첫 번째 스크립트로 VBScript를 사용하지 않는 한 javacript : (javascript 콜론)을 사용하지 마십시오. 다른 모든 경우에는 javascript가 기본값입니다. 오류가 발생하는 때

는, IE에서, <a href="javascript:something()" 대신 <a href="#" onclick="return something() 마지막으로

등의 만행을 사용하지 마십시오, 기본 동작은 양식을 제출하는 것입니다. 당신은 아주 잘 완전히 다른 곳에서 다른 오류가 및 유효성 검사 (0은 false로 most anything else is true을 평가)

<script type="text/javascript"> 
var isvalidateNeeded = true; 
function validate(theForm) { 
    if (!isvalidateNeeded) return true; // allow submission 
. // normal validation 
. 
. 
    return true; // allow submission 
} 
</script> 
<form onsubmit="return validate(this)"> 
. 
. 
. 
<input type="submit" name="subaction" value="Test" onclick="isvalidateNeeded=false" /> 
<input type="submit" name="subaction" value="Check" onclick="isvalidateNeeded=false" /> 
<input type="submit" name="subaction" value="Submit" onclick="isvalidateNeeded=true" /> 
</form> 
0

validateUser() 또는 deleteUser()에 버그 또는 오류가있는 경우 "return false"가 앵커 액션을 중지하지 않으며 브라우저가 href "하위 작업"에 연결하려고 시도합니다. 여기에 논리는 다음과 같습니다

  1. 사용자의 onclick()는
  2. 가 validateUser에 오류가 있습니다() 그래서 자바 스크립트 충돌 validateUser를 발생하고 모든 코드의 실행을 중지
  3. 앵커
  4. 클릭.
  5. Javascript가 이미 중지 되었기 때문에 false가 반환되지 않습니다.
  6. 브라우저가 (나는 팝업을 산란 Recyclebank에서 제공하는 코드를 사용했다) 타사 자바 스크립트 API에 의존하고 있으며, 타사 API 나누기 업데이 트를 만드는 경우 href 속성

로 이동하려고 시도합니다 그러면 JavaScript가 문제가 될 것입니다.

다음은 정상적인 조건 및 오류 조건에서 링크를 중지합니다.

<a class="button" href="javascript:;" onclick="validateUser();return false;">Validate User</a> 
1

변경해야 할 것은 validateUser() 기능입니다. IE는 이벤트의 반환 값을 찾고 있으므로 다음을 지정해야합니다.

event.returnValue = true; 
return true; 

event.returnValue = false; 
return false; 
관련 문제