2010-04-27 71 views
28

Tôi đang cố gắng chặn việc gửi biểu mẫu để thay đổi giá trị của nhãn keywords của tôi.Không thể để `submit()` một biểu mẫu html sau khi chặn việc gửi với javascript

Tôi có đoạn mã sau:

<HTML> 
<FORM name="searchForm" method="get" action="tmp.html" > 
<input type="text" name="keywords" /> 
<input type="button" name="submit" value="submit" onclick="formIntercept();"/> 
</FORM> 
<SCRIPT language="JavaScript"> 
document.searchForm.keywords.focus(); 
function formIntercept() { 
    var f = document.forms['searchForm']; 
    f.keywords.value = 'boo'; 
    f.submit(); 
}; 
</SCRIPT> 
</HTML> 

Khi tôi chạy trong chrome và nhấp vào nút gửi những thay đổi từ khóa nhãn để boo, nhưng giao diện điều khiển javascript nói:

Uncaught TypeError: Property 'submit' of object <#an HtmlFormElement> is not a function. 

thế nào có thể Tôi gửi biểu mẫu với các từ khóa được điều khiển?

+1

một ' 'hoặc cụ thể hơn, bạn có ý nghĩa gì khi đặt thuộc tính type? –

+0

oops. bạn đúng. thay đổi 'type =" label "' thành 'type =" text "' –

Trả lời

0
<html> 
<head></head> 
<body> 
<form name="searchForm" method="get" action="tmp.html" onsubmit="formIntercept(this);"> 
<input type="text" name="keywords" /> 
<input type="submit" name="submit" value="submit"/> 
</form> 
<script type="text/javascript"> 
document.searchForm.keywords.focus(); 
function formIntercept(form) { 
    form.keywords.value = 'boo'; 
    //form.submit(); 
} 
</script> 
</body> 
</html> 
+0

Đó là nó! Thay đổi của bạn của 'loại =" nút "' để 'type =" submit "' làm việc. Cảm ơn! –

+1

tôi tưởng tượng nó đã được loại bỏ 'form.submit()' – seanmonstar

+0

Jacob tinh chỉnh nó hơn nữa, nhưng chỉ thay đổi 'type =" button "' thành 'type =" submit "' làm cho mã hoạt động. Tôi cũng sẽ thay đổi những thay đổi khác của anh ấy, vì nó có vẻ ít hacky hơn con đường của tôi. –

117

Lý do cho sự lỗi khi cố gắng gọi form.submit() là nút gửi của bạn được gọi là "submit". Điều này có nghĩa là thuộc tính "submit" của đối tượng Form của bạn bây giờ là một tham chiếu đến nút gửi, ghi đè phương thức "submit" của mẫu thử nghiệm của biểu mẫu.

Đổi tên nút gửi sẽ cho phép bạn gọi phương thức submit() mà không có lỗi.

+6

Bạn thưa ngài, là một CHÚA! Không bao giờ biết về điều này. Tôi đã sử dụng '$ ('form: submit'). Click();' và nó đã bị rơi firefox trong khi giao diện điều khiển Firebug đã được mở. Tôi đã cố gắng thay đổi để chấp nhận suy nghĩ rằng nó sẽ bỏ qua việc nhấp vào nút, nhưng nó không hoạt động chút nào! Tôi thấy điều này, thay đổi tên của nút gửi và HEY PRESTO! Nó hoạt động! Không còn đâm sập với firebug nữa. XOXOXOXOXOXOX !!! – Benno

+1

Tôi nghĩ rằng câu trả lời cho câu hỏi thực tế, lỗi được tạo ra bởi.submit(), mặc dù chức năng của ứng dụng hoạt động, lỗi sẽ được sửa bằng cách thay đổi tên của nút gửi mà không xóa f.submit(); Cảm ơn bạn Chris, bạn đá! – raphie

+1

Đây là một công cụ kiểm tra để kiểm tra chống lại điều này (+ vài điều tương tự): http://kangax.github.com/domlint/ –

0

Xem jQuery .submit().

$("form").submit(function() { 
    // TODO tweak your form data before it gets sent 
}); 
9

Vấn đề là khi một số phần tử là <input type="submit" name="submit" /> phương thức submit() sẽ không hoạt động. Giải pháp tốt nhất cho tình huống này là thay đổi tên của loại đầu vào đó gửi thành nội dung khác ví dụ như gửi nút, v.v.

0

Chỉ cần thay đổi tên nút gửi và nó sẽ hoạt động!

0

Chris Butler giải thích rõ vấn đề.

Bạn có thể sử dụng phương pháp gốc gửi của HTMLFormElement để giải quyết sự cố. Trong trường hợp của bạn:

function formIntercept() { 
    var f = document.forms['searchForm']; 
    f.keywords.value = 'boo'; 
    HTMLFormElement.prototype.submit.call(f); 
}; 
0

tìm thấy rất hữu ích, lỗi này là do yếu tố khác theo hình thức với name = nộp sau khi đổi tên các document.getElementById('myform').submit() làm việc

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