2016-10-07 2 views
1

은 (크롬 53) 양식 요소를 감안에는 반환 값이 없다 이 같은 공중 납치) 형태의 "onsubmit"이벤트 :은 다음과 같다

<script> 
    (function() { 
     var f = document.forms[0]; 
     var originalSubmit = f.onsubmit; 
     let result = "result init"; 
     f.onsubmit = function (e) { 
      e.preventDefault(); 
      console.log("Intercepted"); 
      result = originalSubmit.apply(f, [e]); 
      console.log("user submit result", result); 
      return true; 
     }; 
    })(); 
</script> 

변수 result 항상 undefined입니다. 모든 콘솔 결과는 다른 것으로 예상됩니다.

나는 그것이 'scoping /'this '과 관련이 있다고 확신하지만 많은 머리를 긁으면 나는 그것을 볼 수 없다.

크게 나는 크롬에서 코드를 테스트하고 괜찮 았는데

답변

2

:-) 감사 어떤 도움 ... 콘솔에서

<!DOCTYPE html> 
<html> 
<body> 
<form name="testForm" onsubmit="return onSubmit(event);"> 
    <p>Test OnSubmit Hijack</p> 
    <input type="Submit" value="Submit" /> 
</form> 
<script type="text/javascript"> 
    function onSubmit(e) { 
     console.log("onSubmit Event", e) 
     return false; 
    } 
</script> 
<script> 
(function() { 
    var f = document.forms[0]; 
    var originalSubmit = f.onsubmit; 
    let result = "result init"; 
    f.onsubmit = function (e) { 
     e.preventDefault(); 
     console.log("Intercepted"); 
     result = originalSubmit.apply(f, [e]); 
     console.log("user submit result", result); 
     return true; 
    }; 
})(); 
</script> 
</body> 
</html> 

출력 :

Intercepted 
test.html:10 onSubmit Event Event {isTrusted: true, type: "submit", target: form, currentTarget: form, eventPhase: 2…} 
test.html:23 user submit result false 
+0

대단히 감사합니다. 올바른 길을 걸겠습니다. 물론 어리석은 실수를 발견했습니다 :-) – Serexx

0

결과 변수는 아니다 정의되지 않았습니다. onSubmit (e) 함수에서 값을 반환합니다. 당신이 진실을 돌려 주면, 당신은 진실을 발견 할 것입니다. 그렇지 않으면 당신이 다른 어떤 것 (문자열이나 숫자)을 돌려 주면 결과에서 얻을 것입니다.

+0

감사합니다, 그게 내가 예상했던 것인데 주변 코드의 실수입니다 (어리석게도 게시하지 않았습니다) 범인이었다. – Serexx

관련 문제