2012-07-06 29 views
5

Tôi có một biểu mẫu với một số giá trị hành động và tiện ích được gửi qua thẻ đầu vào gửi. Vấn đề là nó phải được submittable bởi hai nút, vì vậy tôi đã viết một chức năng cho nút thứ hai để thay đổi hành động và giá trị onsubmit dạng:javascript thay đổi form onsubmit động

<a href="javascript:submitCompare()" class="submit">Compare</a> 

function submitCompare() 
{ 
    document.myForm.action = "anotherAction.php"; 
    document.myForm.onsubmit = function() {return countChecked()}; 
    document.myForm.submit(); 
} 

function countChecked() 
{ 
    var n = $(".reports input:checked").length; 
    if (n >= 3) { 
    alert ('You must select less than 3 reports.'); 
    return false; 
    } 
    else return true; 
} 

Sau khi nhấp vào So sánh liên kết nó sẽ gửi tôi đến trang anotherAction.php một cách chính xác, nhưng ngay cả khi tôi có nhiều hơn 2 hộp kiểm đã chọn (đó là quy tắc xác thực). Ai đó có thể giúp tôi làm cho hàm onsubmit hoạt động chính xác không?

+0

Chỉ cần một lưu ý phụ, tôi nghĩ rằng '(n> 2)' là đủ thay vì '(n> = 3)' – codingbiz

Trả lời

1

Trong submitCompare(), bạn một cách rõ ràng và vô điều kiện gọi

document.myForm.submit(); 

Những gì bạn có thể muốn thay vào đó là

if (countChecked()) { 
    document.myForm.submit(); 
} 
+0

Cảm ơn rất nhiều, theo cách đó nó đơn giản hóa toàn bộ ý tưởng và thực sự hoạt động! – user1507558

+0

đừng quên chấp nhận câu trả lời đúng ;-) (dấu kiểm bên trái) –

4
document.myForm.onsubmit = function() {return countChecked()}; 

nên

document.myForm.onsubmit = function(e) { 
    e = e || window.event; 
    if (!countChecked()) { 
     e.preventDefault(); 
     e.returnValue = false; 
    } 
}; 

Trở sai trên gửi sẽ chỉ kết thúc bất kỳ thực hiện chức năng hơn nữa. Bạn muốn ngăn chặn hành vi gửi mặc định nếu bạn không muốn gửi.

+0

thử nó, nhưng không có sự thay đổi trong hành vi của quá trình gửi. – user1507558

+0

Có lẽ đó là hàm countChecked của bạn. thử làm một số console.log để xem nếu nó là nhận được số tiền phải của hộp kiểm tra – Trevor

+0

countChecked() trả về giá trị chính xác. Tôi thực sự không biết tại sao giải pháp của bạn không hoạt động nhưng @Otto Allmendinger đã làm cho nó phù hợp với tôi, vì vậy trường hợp đóng cửa :) – user1507558

2

Đó là một câu trả lời muộn, nhưng nếu ai đó đang nhìn này ...

thay vì:

document.myForm.onsubmit = function() {return countChecked()}; 

Tôi nghĩ rằng bạn muốn:

document.myForm.setAttribute("onsubmit", "return countChecked()"); 
+0

Bạn đã lưu thời gian phút cuối cùng có giá trị của mình – TheRumboJumbo

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