2012-05-09 4 views
17

제출시 javascript 함수를 실행해야하는 양식이 있습니다.이 함수는 데이터를 php로 보내고 메일을 보내고 메일을 보냅니다. 하지만 그것은 단지 여우에서 작동합니다.javascript로 양식 작업

action="javascript:simpleCart.checkout()" 

simpleCart가의 .js 파일 체크 아웃입니다 :이 양식 동작에서 외부 파일에서 함수를 호출하는 올바른 방법인가 : 양식 동작은 내 질문은, IE에서 아무것도하지 않는 것()는 함수입니다.

팁은 파이어 폭스에서는 작동하지만 IE, 크롬 또는 사파리에서는 작동하지 않는 이유를 이해하기 위해 고심하고 있습니다.

<form name=form onsubmit="return validateFormOnSubmit(this)" enctype="multipart/form-data" action="javascript:simpleCart.checkout()" method="post"> 
+0

validateFormOnSubmit에서 해당 함수를 호출 할 수 없습니까? – Joe

+0

아니요 simpleCart가 장바구니의 거대한 js 파일이고 validateFormOnSubmit이 유효성 검사 .js 파일에 있기 때문에 파일을 결합 할 수 없습니다. –

+0

나는 당신의 말을 보았습니다. 내가 가진 방식대로 행동을 사용하는 것이 옳지 않은가? –

답변

34

JavaScript 함수로 설정된 양식 동작은 널리 지원되지 않습니다. FireFox에서 작동하는 것에 놀랍습니다.

가장 좋은 방법은 PHP 스크립트에 양식 action을 설정하는 것입니다. 양식에서 다음

function validateFormOnSubmit(theForm) { 
    var reason = ""; 
    reason += validateName(theForm.name); 
    reason += validatePhone(theForm.phone); 
    reason += validateEmail(theForm.emaile); 

    if (reason != "") { 
     alert("Some fields need correction:\n" + reason); 
    } else { 
     simpleCart.checkout(); 
    } 
    return false; 
} 

: 당신이 제출하기 전에 아무것도 할 필요가 있다면 당신은 알고 보니 당신이 어떤 추가 기능, 여기에 단지 작은 변화를 필요로하지 않았다 onsubmit

편집에 추가 할 수 있습니다 :

<form action="#" onsubmit="return validateFormOnSubmit(this);"> 
+0

문제는 내가 내 유효성 검사를 실행해야 다음 PHP 스크립트를 실행하는 체크 아웃 기능을 실행 –

+0

@ whispering_Jack은 내 대답을 반영하여 그 –

+0

을 확인해 보았습니다. 감사 –

1

나는 항상 HTML 문서의 머리 부분에 js 파일을 포함하고 있으며, 액션에서 javascript 기능을 호출합니다. 다음과 같이 입력하십시오 :

action="javascript:checkout()" 

시도해주세요.

html 머리글에 스크립트 참조가 포함되어 있는지 잊지 마세요.

나는 파이어 폭스에서 그 작품의 원인을 모르겠다. 감사합니다.

+0

thats 내가 한 일 –

+0

유일한 방법은 작동하도록 thiis 얻을 수있는 양식 작업을 사용하고 있지만 Internet Explorer에서 작동하지 않습니다, 내가 wjy 게시 된 솔루션을 작동하지 않는 이해하지만 그들은 simpleCart.chekout 호출하지 못할 –

+0

가장 좋은 방법은 제 생각에는 jquery입니다. 이것을 확인하십시오 : http://api.jquery.com/submit/ 이벤트 제출. 그리고이 아약스 양식은 http://www.queness.com/post/160/create-a-ajax-based-form-submission-with-jquery이 웹 사이트에서 데모를보실 수 있습니다. – vfabre

15

난 그냥 파이어 폭스, 크롬, 에지 및 Safari에서 이것을 시도, 모두 잘 작동하는 것 :

<form action="javascript:alert('Hello there, I am being submitted');"> 
    <button type=submit> 
     Let's do it 
    </button> 
</form> 

그래서 분명히이 옵션입니다. 또한 어떤 일이 발생했는지 설명하기 때문에 의미 론적으로 적절하다고 생각합니다. 즉, 양식을 제출하면 브라우저가 필요 없지만 대신 다른 곳으로 전화를 걸어야합니다.

<form action="javascript:myFunction(this)"> <!-- doesn't work --> 

따라서, 내 추천은 다음과 같습니다 :

유일한 이유는 당신이 매개 변수로 간단한 키워드로 양식을 넘겨 수 없다는 것입니다하지 말아야 할

<form action="javascript:;" onsubmit="myFunction(this)"> 

... 예상대로 작동합니다. 양식을 제출하지 않고 제출을 막기 위해 "return false"가 필요하지 않으며 JQuery의 domready를 사용하여 양식을 처리 할 필요가 없으며 정확하게 표시됩니다. 자동화가 필요없고 마법사가 필요 없으며 myFunction으로 전화를 걸어 나머지 작업을 수행하십시오.

(물론 다른 솔루션도 사용할 수 있으며 문제는 없습니다.이 메소드를 선호합니다.)

+0

예 "print this page"void (0)는 이것을 수행하는 가장 안전한 크로스 플랫폼 방법 일 수 있습니다. "대신"Return "키보드 버튼이 표시됩니다 (form에 type ="submit "인 요소가있는 경우).

이것은 AngularJS 앱용 내 솔루션입니다. – TaeKwonJoe

관련 문제