8

Tôi có một biểu mẫu sẽ được gửi bằng mã javascript được kích hoạt trong "onsubmit" của thẻ. Hoạt động tốt trên tất cả các trình duyệt - nhưng không phải trên IE7/IE8.onsubmit = "return false" không có hiệu lực trên Internet Explorer 7/8 (biểu mẫu vẫn được gửi)

Tôi có thể làm gì?

<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false"> 
    [...] 
    <input type="submit" value="Go"> 
</form> 
+0

Không có lý do đơn giản nào cho 'return false;' không hoạt động như mong muốn. Chúng tôi cần xem mã của bạn để có cái nhìn tốt hơn về những gì đang diễn ra. ** chỉnh sửa ** chúng ta cần xem mã cho 'submitmyform()', vì có khả năng một lỗi xảy ra ngăn cản 'return false;' đang được thực thi. –

+0

@Andy E: Tôi đã thêm mã mẫu –

Trả lời

0

Giải pháp cho chúng tôi là di chuyển sự kiện javascript từ "tiện ích" của biểu mẫu sang "onclick" của nút gửi.

<form action="/dosomething.htm" method="GET"> 
    [...] 
    <input type="submit" value="Go" onclick="submitmyform();return false"> 
</form> 
+4

Điều này sẽ chỉ ngăn việc gửi biểu mẫu xảy ra bằng cách nhấp hoặc nhấn phím enter trên nút gửi đó. Nhấn phím enter trong một điều khiển đầu vào bên trong biểu mẫu sẽ làm việc xung quanh nó. –

+1

Tôi cũng nghĩ rằng đó là trường hợp. Nhưng ... đó không phải là những gì tôi thấy ở đây. –

+0

@AndyE Nó thực sự ngăn chặn ngay cả khi nhấn enter ... kiểm tra xem nó ra –

-2

Tôi nghĩ rằng vấn đề là đổi lại sai bạn cần phải trả lại nó từ chức năng 'onsubmit' của bạn

xem ví dụ.

Biểu mẫu này sẽ không bao giờ được gửi trong IE 7/8 nữa.

<form action="acknowledgement.html" method="get" onsubmit="verify();"> 
     <input type="submit" name="submit" 
     VALUE="Submit"> 
     </form> 

<script language="javscript"> 
function verify(){ 

return false; 
} 
</script> 

Danny.

+2

Thao tác này sẽ không hoạt động. Hàm 'verify()' trả về điều khiển cho hàm 'onsubmit', vì vậy nó là hàm' onsubmit' cần trả về false để hủy bỏ hành động mặc định. –

-2

Nó hoạt động - kiểm tra W3Scools dụ (lấy từ) http://www.w3schools.com/js/js_form_validation.asp

<html> 
<head> 
<script type="text/javascript"> 
function validate_required(field,alerttxt) 
{ 
with (field) 
    { 
    if (value==null||value=="") 
    { 
    alert(alerttxt);return false; 
    } 
    else 
    { 
    return true; 
    } 
    } 
} 

function validate_form(thisform) 
{ 
with (thisform) 
    { 
    if (validate_required(email,"Email must be filled out!")==false) 
    {email.focus();return false;} 
    } 
} 
</script> 
</head> 

<body> 
<form action="submit.htm" onsubmit="return validate_form(this)" method="post"> 
Email: <input type="text" name="email" size="30"> 
<input type="submit" value="Submit"> 
</form> 
</body> 

</html> 
11

Tôi sẽ nitpick này. Nếu bạn muốn xử lý việc gửi biểu mẫu, đó là nội dung gửi. Nếu người dùng truy cập vào một trong các trường của bạn, trình xử lý onclick của bạn sẽ hoàn toàn tránh được. Đây là một ví dụ cơ bản để làm điều này theo cách không gây khó chịu.

<form name="myform"> 
    <input type="submit" /> 
</form> 
<script> 
    document.myform.onsubmit = function(){ 
    alert('handled'); 
    return false; 
    } 
</script> 

Điều này có thể được thực hiện đơn giản hơn rất nhiều với jQuery, cùng hình thức ...

$("form[name=myform]").bind('submit',function(){ 
    alert('handled'); 
    return false; 
}); 
+2

Đó không phải là không gây khó chịu, nếu bạn có một cơ chế mà bạn có thể tự động liên kết một sự kiện với một hàm mà không biết bất kỳ chi tiết triển khai cụ thể nào, thì bạn đang có. I E. có 'document.myform' hoặc' form [name = myform] 'là * giống như * obtrusive vì có thuộc tính onsubmit trong HTML, ngoại trừ theo hướng ngược lại. Những gì bạn cần là một cách để khám phá các biểu mẫu, khám phá các hàm xác nhận cho nó (có thể bằng cách đặt tên quy ước 'validateMyForm()'), và do đó ràng buộc tự động và chung chung. Nếu bạn thực sự muốn không gây khó chịu. Nó cũng có thể tái sử dụng được. –

+0

Nếu bạn có 2 biểu mẫu trên một trang và mỗi biểu mẫu được yêu cầu khác nhau về logic gửi, bạn phải có một số cách để biểu thị biểu mẫu nào nhận được hàm nào. Tôi nghĩ rằng đó là cơ bản những gì đã được thực hiện trong câu trả lời này thông qua các thuộc tính tên. Bạn cũng có thể sử dụng thuộc tính data- *. Tôi nghĩ đối với các trường hợp như thế này, 'JavaScript không phô trương' đề cập đến việc không sử dụng js nội tuyến trong đánh dấu thay vì có đánh dấu chặt chẽ và JavaScript được tách riêng. – jinglesthula

2
<script type="text/javascript"> 
<!-- 

function submitHandler() 
{ 
    alert(0); 
    return false; 
} 

window.onload=function(){document.getElementById("formid").attachEvent("onsubmit", submitHandler);} 
--> 
</script> 

<form action="/dosomething.htm" method="GET" id="formid"> 
    [...] 
    <input type="submit" value="Go"> 
</form> 

Các đính kèm Phương thức sự kiện duy nhất chỉ hoạt động cho IE7/8. Nếu bạn muốn có giải pháp trình duyệt chéo đáng tin cậy, bạn nên sử dụng addEventListener làm phương án thay thế.

Hy vọng điều này sẽ giúp

-2

Nếu bạn muốn IE tuân thủ các tiêu chuẩn, bạn sẽ phải cho biết tiêu chuẩn nào cần tuân thủ trong tuyên bố.

Nếu không có sự cố nào đó sẽ khiến bạn thất vọng vô tận để làm điều bạn muốn. Với một, hầu hết sự thất vọng biến mất vì nó bắt đầu hoạt động như mọi trình duyệt khác.

+0

đó là cái nào? – BritishDeveloper

3

Tôi không nghĩ rằng lỗi trả về của bạn đã từng đạt được, vì nó xuất hiện sau những gì được trả về từ chức năng của bạn.

<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false"> 

Đảm bảo rằng bạn trả về sai bên trong hàm 'submitmyform()' của bạn, nếu không thì nó có thể trả về true cho sự kiện theo dõi biểu mẫu của bạn.

-1

Thực tế, vì bạn viết submitmyform();return false chỉ submitmyform được đánh giá.

Trong trường hợp của hai lệnh, bạn sẽ phải đặt chúng giữa niềng răng như thế này

{submitmyform();return false;} 

để cả hai được đánh giá.

+0

Ai đó đã bỏ phiếu này !? –

0

Tôi đã gặp lỗi tương tự và khi tôi bật bảng điều khiển, nó không bao giờ đến. Vì vậy, tôi đã tìm ra, đó là giao diện điều khiển, mà không được biết đến bởi nhà thám hiểm internet miễn là nó bị tắt. Chỉ cần thêm bảng điều khiển giả vào cửa sổ có mã sau đây (nếu chưa có sẵn):

var myconsole = {log : function(param){}} 
window.console = window.console || myconsole; 

Với điều này bạn có thể gặp rắc rối, nếu bạn muốn có bảng điều khiển javascript microsoft. Sau đó, chỉ cần bình luận các dòng ra. Nhưng bây giờ, đối tượng giao diện điều khiển không phải là không xác định nữa trên toàn bộ trang web.

0
<form action="/dosomething.htm" method="GET" onsubmit="return submitmyform(this)"> 
    [...] 
    <input type="submit" value="Go"> 
    </form> 

này hoạt động tốt ... chức năng phải trả lại đúng hay sai

1

Để hủy một sự kiện trong di sản IE, bạn cần phải thiết lập returnValue-false. Chỉ cần quay lại false sẽ không làm điều đó. Tôi không biết tại sao Microsoft thực hiện nó theo cách này.

function validateForm(evt) { 
// if form is not valid 
    if(!condition) { 
    // if evt has preventDefault 
     if(evt.preventDefault) 
      { event.preventDefault(); } 
    // if evt has returnValue 
     else if(evt.returnValue) 
      { evt.returnValue = false; } 
    // fallback 
     else 
      { return false; } 
    } 
} 

// assume form is reference to your form 
form.attachEvent('onsubmit',validateForm); 
2

dùng thử. làm việc cho tôi.

onSubmit = "javascript: return false"

-2
document.forms.userFormRegisterr.onsubmit = function(e){ 
    return false; 
}; 
6

Một số ý tưởng đề xuất ở đây làm việc (vì họ sử dụng nhiều cách khác nhau để viết mã chính xác), nhưng có một câu trả lời dễ dàng hơn nhiều

OP đã viết:

onsubmit="submitmyform();" 

thay vì:

onsubmit="return submitmyform();" 

Vậy đó.

Các vấn đề liên quan