2010-11-19 86 views
82

Tôi đang làm việc trên một ứng dụng web ASP.net.Tôi làm cách nào để hủy gửi biểu mẫu trong nút gửi khi sự kiện nhấp?

Tôi có biểu mẫu có nút gửi. Mã cho nút gửi trông giống như <input type='submit' value='submit request' onclick='btnClick();'>.

Tôi muốn viết một cái gì đó như sau:

function btnClick() { 
    if (!validData()) 
     cancelFormSubmission(); 
} 

Làm thế nào để làm điều này?

+0

ouch, điều này làm tôi đau đầu. Tôi có nhiều đầu vào 'submit' khác nhau. Tôi nghĩ tôi sẽ thử sử dụng các điều khiển phía máy chủ trên trang này. –

+1

có thể trùng lặp của [Làm cách nào để ngăn gửi biểu mẫu?] (Http://stackoverflow.com/questions/3350247/how-to-prevent-form-from-being-submitted) –

Trả lời

146

Bạn đang khấm khá hơn làm ...

<form onsubmit="return isValidForm()" /> 

Nếu isValidForm() lợi nhuận false, sau đó hình thức của bạn không nộp.

Bạn cũng có thể di chuyển trình xử lý sự kiện của mình từ nội tuyến.

document.getElementById('my-form').onsubmit = function() { 
    return isValidForm(); 
}; 
+0

Rất đẹp, nhưng có vẻ như tôi không thể nhận được 'onsubmit' để làm việc bất cứ khi nào tôi sử dụng ASP.net bởi vì asp.net kết thúc tốt đẹp mọi thứ ở dạng riêng ... –

+5

Bạn có thể sử dụng đề nghị thứ hai của anh ấy. Javascript nội tuyến là ma quỷ anyway. – Stephen

+3

Nếu bạn đang sử dụng ASP.Biểu mẫu web NET (gợi ý: không) sau đó không cố gắng bao gồm các biểu mẫu khác. Chúng đơn giản là không tương thích. Tôi nghe ASP.NET MVC cho phép bạn xây dựng các ứng dụng web bằng cách sử dụng đánh dấu thành ngữ. – Quentin

0

sử dụng onclick='return btnClick();'

function btnClick() { 
    return validData(); 
} 
+2

nhấn enter sẽ bỏ qua kiểm tra. Sử dụng onSubmit – Cfreak

0
function btnClick() { 
    return validData(); 
} 
+1

Nó là cần thiết để làm nhiều hơn thế này để làm cho nó hoạt động. Tôi đã cố gắng làm cho functino trở lại đúng hay sai và nó dường như không tạo ra bất kỳ sự khác biệt nào. –

+1

Câu trả lời của ông là chính xác. Được thăng hạng. Bạn cũng phải trả lại nó trong thẻ đầu vào – Cfreak

+1

Ngoài ra, tôi muốn sử dụng 'ev.preventDefault()' hoặc 'ev.returnValue = false' để hủy bỏ hành vi mặc định nhưng không ngăn chặn sự kiện bubbling, trong trường hợp các điều khiển khác quan sát cùng một sự kiện trên cùng một yếu tố. Chỉ sử dụng 'return false' khi bạn muốn dừng sự kiện khỏi bong bóng ** và ** hủy hành động mặc định. Xem [bài viết này] (http://javascript.about.com/library/bldom21.htm). –

11

Bạn cần thay đổi

onclick='btnClick();' 

để

onclick='return btnClick();' 

cancelFormSubmission(); 

để

return false; 

Điều đó nói rằng, tôi muốn cố gắng để tránh những sự kiện nội tại thuộc tính có lợi cho unobtrusive JS với một thư viện (ví dụ như YUI hoặc jQuery) mà có một sự kiện tốt xử lý API và liên kết với sự kiện thực sự quan trọng (ví dụ: sự kiện gửi biểu mẫu thay vì sự kiện nhấp của nút).

+0

Sử dụng onclick sẽ cho phép người dùng nhấn enter và bỏ qua kiểm tra. – Cfreak

34

Thay đổi đầu vào của bạn như thế này:

<input type='submit' value='submit request' onclick='return btnClick();'> 

Và trả về false trong chức năng của bạn

function btnClick() { 
    if (!validData()) 
     return false; 
} 
1

Tại sao không thay đổi nút gửi để một nút thường xuyên, và trên sự kiện click, nộp mẫu đơn của bạn nếu nó vượt qua các bài kiểm tra xác nhận của bạn?

ví dụ

<input type='button' value='submit request' onclick='btnClick();'> 

function btnClick() { 
    if (validData()) 
     document.myform.submit(); 
} 
+1

Nhập thư sẽ bỏ qua séc. Sử dụng onSubmit – Cfreak

+0

Sau đó, nó sẽ không hoạt động chút nào nếu JavaScript không có sẵn. Build on things that work. – Quentin

0

Bạn cần onSubmit. Không phải onClick nếu không ai đó chỉ có thể nhấn enter và nó sẽ bỏ qua xác thực của bạn. Đối với hủy bỏ. bạn cần trả về false. Dưới đây là các mã:

<form onSubmit="return btnClick()"> 
<input type='submit' value='submit request'> 

function btnClick() { 
    if (!validData()) return false; 
} 

Sửa onSubmit thuộc trong thẻ form.

+0

điều này sẽ không hoạt động. nếu dữ liệu hợp lệ, bạn không trả lại đúng. đặt trở lại đúng; ở cuối hàm btnClick() – NickSoft

3

Bạn cần phải return false;:

<input type='submit' value='submit request' onclick='return btnClick();' /> 

function btnClick() { 
    return validData(); 
} 
4

bạn nên thay đổi kiểu từ submit để button:

<input type='button' value='submit request'> 

thay vì

<input type='submit' value='submit request'> 

sau đó bạn sẽ có được tên của nút bấm của bạn trong javascript và liên kết bất kỳ hành động bạn muốn nó

var btn = document.forms["frm_name"].elements["btn_name"]; 
btn.onclick = function(){...}; 

làm việc cho tôi hy vọng nó giúp.

0

Thật đơn giản, chỉ cần trả về false;

Mã dưới đây đi trong onclick của nút gửi bằng jquery ..

if(conditionsNotmet) 
{ 
return false; 
} 
3

Đôi khi onsubmit sẽ không làm việc với asp.net.

Tôi đã giải quyết nó theo cách rất dễ dàng.

nếu chúng ta có một hình thức như vậy

<form method="post" name="setting-form" > 
    <input type="text" id="UserName" name="UserName" value="" 
     placeholder="user name" > 
    <input type="password" id="Password" name="password" value="" placeholder="password" > 
    <div id="remember" class="checkbox"> 
    <label>remember me</label> 
    <asp:CheckBox ID="RememberMe" runat="server" /> 
    </div> 
    <input type="submit" value="login" id="login-btn"/> 
</form> 

Bây giờ bạn có thể bắt được rằng sự kiện trước khi form postback và ngăn chặn nó từ postback và làm tất cả những ajax bạn muốn sử dụng jquery này.

$(document).ready(function() { 
      $("#login-btn").click(function (event) { 
       event.preventDefault(); 
       alert("do what ever you want"); 
      }); 
}); 
Các vấn đề liên quan