Làm cách nào để hủy gửi biểu mẫu trong sự kiện onclick vào nút gửi?


99

Tôi đang làm việc trên một ứng dụng web ASP.net.

Tôi có một biểu mẫu có nút gửi. Mã cho nút gửi trông như thế nào <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 để tôi làm điều này?


ouch, điều này làm tôi đau đầu. Tôi có một số submitđầu vào 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.
Vivian River,

Câu trả lời:


183

Tốt hơn hết là bạn nên làm ...

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

Nếu isValidForm()trả lại false, thì biểu mẫu của bạn không gửi.

Bạn cũng có thể nên 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();
};

Nice, nhưng có vẻ như tôi không thể có được onsubmitđể làm việc bất cứ khi nào tôi đang sử dụng ASP.net vì asp.net kết thúc tốt đẹp tất cả mọi thứ trong đó là hình thức riêng ...
Sông Vivian

5
Bạn có thể sử dụng gợi ý thứ hai của anh ấy. Javascript nội tuyến dù sao cũng là ác quỷ.
Stephen

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

@David, nếu sử dụng biểu mẫu khác không tương thích với biểu mẫu web ASP.net, thì tôi có nên chỉ sử dụng điều khiển phía máy chủ không?
Vivian River,

2
Ai đó đã trả lời CHÍNH XÁC như bạn stackoverflow.com/a/23604664/1639385 . Tôi nghĩ đó là một sự trùng hợp quá nhiều.
Ulysses Alves

43

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

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

Và trả về false trong hàm của bạn

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

13

Bạn cần thay đổi

onclick='btnClick();'

đến

onclick='return btnClick();'

cancelFormSubmission();

đến

return false;

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


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

7

Đôi khi onsubmitsẽ không hoạt động với asp.net.

Tôi đã giải quyết nó bằng 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 lấy sự kiện đó trước khi đăng lại biểu mẫu và dừng nó khỏi quá trình đăng lại và thực hiện tất cả các ajax bạn muốn bằng cách sử dụng jquery này.

$(document).ready(function () {
            $("#login-btn").click(function (event) {
                event.preventDefault();
                alert("do what ever you want");
            });
 });

5

bạn nên thay đổi loại từ submitthành button:

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

thay vì

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

sau đó bạn lấy tên nút của mình trong javascript và liên kết bất kỳ hành động nào bạn muốn với nó

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

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


4

Bạn cần return false;:

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

function btnClick() {
    return validData();
}

1

Tại sao không thay đổi nút gửi thành nút thông thường và trong sự kiện nhấp chuột, hãy gửi biểu mẫu của bạn nếu nó vượt qua các bài kiểm tra xác thực của bạn?

ví dụ

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

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

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

Sau đó, nó sẽ không hoạt động nếu JavaScript không có sẵn. <a href=" icant.co.uk/articles/pragmatic-progressive-enhancement/... vào những thứ work</a> .
Quentin

1

Bạn cần onSubmit. Không onClickkhác ai đó có thể chỉ nhấn enter và nó sẽ bỏ qua xác nhận của bạn. Đối với việc hủy bỏ. bạn cần trả về false. Đây là mã:

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

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

Chỉnh sửa onSubmit thuộc thẻ biểu mẫu.


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

1

Nó đơn giản, chỉ cần trả về false;

Đoạn mã dưới đây đi trong một cú nhấp chuột của nút gửi bằng jquery ..

if(conditionsNotmet)
{
return false;
}

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
Cần phải làm nhiều hơn thế để nó hoạt động. Tôi đã cố gắng làm cho hàm trả về true hoặc false và nó dường như không tạo ra bất kỳ sự khác biệt nào.
Vivian River,

1
Câu trả lời của anh ấy là đúng. Đã ủng hộ. Bạn phải trả lại nó trong thẻ đầu vào cũng
Cfreak

1
Ngoài ra, tôi muốn sử dụng ev.preventDefault()hoặc ev.returnValue = falseđể hủy hành vi mặc định nhưng không ngăn sự kiện nổi lên, 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 phần tử. return falseChỉ sử dụng khi bạn muốn ngăn sự kiện nổi lên hủy hành động mặc định. Xem bài viết này .
Klemen Slavič

Việc phải trả lại nó trong trình xử lý sự kiện chính là phần thông tin chính bị thiếu trong câu trả lời. Nếu không có điều đó, câu trả lời là không đầy đủ và không đủ giúp đáng để ủng hộ.
Quentin

0
<input type='button' onclick='buttonClick()' />

<script>
function buttonClick(){
    //Validate Here
    document.getElementsByTagName('form')[0].submit();
}
</script>

2
Để có câu trả lời hữu ích, phản ứng này cần được kéo dài. Giải thích tại sao đây là một câu trả lời cho câu hỏi.
Jeroen Heier

0

Với JQuery thậm chí còn đơn giản hơn: hoạt động trong Asp.Net MVC và Asp.Core

<script>
    $('#btnSubmit').on('click', function () {

        if (ValidData) {
            return true;   //submit the form
        }
        else {
            return false;  //cancel the submit
        }
    });
</script>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.