2013-01-21 18 views
5

Tôi đang làm việc với một số mã cũ. Nó sử dụng xác thực biểu mẫu ColdFusion được tích hợp sẵn (ví dụ: _required các trường ẩn). Tôi muốn thêm nút hủy vào biểu mẫu. Nút hủy có thực sự xử lý một số logic nghiệp vụ (vì vậy tôi không thể chỉ làm cho nó đặt location.href sang một số trang khác). Vấn đề là, bởi vì nút hủy là nút gửi, nó kích hoạt tính năng xác thực được tích hợp sẵn và người dùng nhận được lỗi là trường được yêu cầu.Bất kỳ cách nào để tắt tính năng xác thực biểu mẫu được tích hợp sẵn của ColdFusion?

Có cách nào để vô hiệu xác thực cho nút gửi cụ thể đó không? Tôi không muốn sửa đổi mã cơ bản mà xây dựng biểu mẫu, vì nó được sử dụng trong một loạt các địa điểm. Đây là một phiên bản đơn giản hóa của mã của tôi:

<cfif IsDefined("Form.OK")> 
    You clicked OK! 
<cfelseif IsDefined("Form.Cancel")> 
    You clicked Cancel! 
</cfif> 

<cfoutput> 
    <form action="#CGI.Path_Info#" method="POST"> 
    Enter Name: <input type="text" name="Name" value="" /><br/> 
    <input type="hidden" name="Name_required" value="" /> 
    <input type="submit" name="OK" value="OK" /> 
    <input type="submit" name="Cancel" value="Cancel" /> 
    </form> 
</cfoutput> 

Một điều mà tôi nghĩ là làm cho onclick của nút Cancel loại bỏ bất kỳ trường "_required" bị ẩn khỏi DOM. Điều này làm việc, nhưng nó cảm thấy rất hacky. Đây là Javascript tôi đã sử dụng cách tiếp cận cho rằng:

<script type="text/javascript"> 
    function removeRequiredFields() { 
    var els = document.getElementsByTagName('input'); 
    for(var i = 0; i <= els.length; i++) { 
     if(els[i].type == 'hidden' && els[i].name.endsWith('_required')) 
     els[i].parentNode.removeChild(els[i]); 
    } 
    } 
</script> 
+0

(btw, workaround của bạn cũng có thể muốn kiểm tra 'textarea' và' select' thẻ?) –

+0

Cuối cùng, tốt nhất (và dễ nhất) giải pháp có thể được thực sự thay đổi mã tạo ra các hình thức. Trong khi các giải pháp JS để loại bỏ các lĩnh vực có thể làm việc, nó có vẻ 'hacky'. Làm thế nào bạn sẽ xử lý có JS được thực hiện? Điều đó sẽ không cần phải được thêm vào mã tạo biểu mẫu không? –

+1

Liệu Huỷ có thực sự cần gửi biểu mẫu không? Điều gì sẽ xảy ra nếu bạn thay đổi nút Hủy từ kiểu 'submit' thành kiểu' nút' và xử lý nó là xử lý thông qua sự kiện onclick? –

Trả lời

5

CF9 + - Application.cfc

this.serverSideFormValidation="false"; 

http://www.raymondcamden.com/index.cfm/2009/7/12/My-first-ColdFusion-9-scoop--disable-server-side-validation

CF8 - Application.cfc

<cfset this.name = "myApplication"> 
<cfset url.form = structnew()/> 
<cfset structappend(url.form,form)/> 
<cfset structclear(form)/> 
<cffunction name="onRequestStart"> 
    <cfset structappend(form,url.form)/> 
    <cfset structdelete(url,"form")/> 
</cffunction> 

http://www.cfinsider.com/index.cfm/2008/9/30/Getting-Around-ColdFusion-Form-Validation

+1

nhưng điều này vô hiệu hóa nó cho toàn bộ ứng dụng ... Tôi chỉ muốn nó vô hiệu hóa cho một nút cụ thể – Kip

+3

Wow, không biết về một trong những người. ** Kip **: Nếu bạn tắt hoàn toàn, bạn có thể tự thực hiện lại chính xác (nó không hề phức tạp). Ngoài ra: bạn biết, tôi hy vọng rằng việc xác thực bằng các tên trường biểu mẫu vẫn không an toàn như xác thực phía máy khách ... Nếu bạn chưa có xác thực phía máy chủ _proper_, ứng dụng của bạn có thể có lỗ hổng bảo mật. –

+4

Có nói rằng, để làm điều đó có chọn lọc bạn có thể làm: '' - nhưng thực sự bạn nên sửa nó đúng cách. –

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