2012-09-14 43 views
8

Tôi có một chức năng ở đây xác nhận các trường trong biểu mẫu nếu chúng trống.Cách kiểm tra giá trị trả về của hàm nếu đúng hoặc sai

function ValidateForm() 
{ 
    jQuery('span.error_msg').hide(); 
    var success = true; 
    jQuery("#shippingF input").each(function() 
     { 
      if(jQuery(this).val()=="") 
      { 
       jQuery(this).next().show(); 
       success = false; 
      } 
    }); 
    return success; 
} 

Bây giờ tôi muốn sử dụng chức năng ở đây:

function post(url,formId) { 
     jQuery("#process").html('<img src="<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/images/co/ajax-loader.gif'; ?>" alt="loading" title="ajax-loader" width="16" height="16" class="alignnone size-full wp-image-134">'); 
    jQuery.post(url, jQuery('#' + formId).serialize(), function(d) { 
     jQuery('html,body').animate({scrollTop: jQuery("#scrollhere").offset().top},'slow'); 
     jQuery("#response").html('<center><p style="height:820px"><span style="color:black;font-weight:bold;font: 11px arial,verdana,sans-serif;"><b>Loading available payment getaways..</b></span><br/><img src="<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/images/co/8-1.gif'; ?>" width="220" height="19" /></p></center>'); 
     jQuery("#response").load("<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/checkout_payment.php'; ?>", function() { Cufon.refresh(); }); 
     jQuery("#response").attr("style","height:1030px"); 
    }); 
} 

Tôi đã thử nó và tôi đưa ra với điều này.

function post(url,formId) { 
ValidateForm(); 
if(ValidateForm() == 'false') { 
    jQuery('html,body').animate({scrollTop: jQuery("#shippingF").offset().top},'slow'); 
} else { 
     jQuery("#process").html('<img src="<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/images/co/ajax-loader.gif'; ?>" alt="loading" title="ajax-loader" width="16" height="16" class="alignnone size-full wp-image-134">'); 
    jQuery.post(url, jQuery('#' + formId).serialize(), function(d) { 
     jQuery('html,body').animate({scrollTop: jQuery("#scrollhere").offset().top},'slow'); 
     jQuery("#response").html('<center><p style="height:820px"><span style="color:black;font-weight:bold;font: 11px arial,verdana,sans-serif;"><b>Loading available payment getaways..</b></span><br/><img src="<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/images/co/8-1.gif'; ?>" width="220" height="19" /></p></center>'); 
     jQuery("#response").load("<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/checkout_payment.php'; ?>", function() { Cufon.refresh(); }); 
     jQuery("#response").attr("style","height:1030px"); 
    }); 
} 
} 

Vấn đề là, xác thực đang hoạt động .. tuy nhiên, chức năng chạy .post() mặc dù có trường trống. Tôi đoán nó trên nếu/điều kiện khác .. là có một cách tốt hơn để thực hiện điều này?

Cảm ơn bạn.

+0

Có lý do nào bạn đang gọi ValidateForm hai lần không? –

+0

Vấn đề là, nếu tôi không bao gồm 'ValidateForm();' trên 'post()' chức năng .. các thông báo lỗi không hiển thị .. – Ken

+0

Nó đã được gọi bên trong if. Bạn không cần phải gọi lại trước đó. –

Trả lời

13
false != 'false' 

Đối với biện pháp tốt, đặt kết quả của việc xác nhận hợp lệ thành một biến để tránh xác thực kép và sử dụng nó trong câu lệnh IF. Như thế này:

var result = ValidateForm(); 
if(result == false) { 
... 
} 
3

bạn đang so sánh kết quả với một string ('false') không được xây dựng trong liên tục tiêu cực (false)

chỉ cần sử dụng

if(ValidateForm() == false) { 

hoặc tốt hơn chưa

if(!ValidateForm()) { 

cũng tại sao bạn gọi validateForm hai lần?

+0

Vấn đề là, nếu tôi không bao gồm 'ValidateForm();' trên 'post()' chức năng .. các thông báo lỗi không hiển thị .. – Ken

0

ValidateForm trả về boolean, không phải là string.
Khi bạn làm điều này if(ValidateForm() == 'false'), giống với if(false == 'false'), điều này không đúng.

function post(url, formId) { 
    if(!ValidateForm()) { 
     // False 
    } else { 
     // True 
    } 
} 
+0

@Blazemonger Có ... http: // jsfiddle.net/vKHbY/ –

1

Cú pháp sai. Bạn không thể so sánh Boolean với chuỗi như "false" hoặc "true". Trong trường hợp của bạn, chỉ cần kiểm tra nó là nghịch đảo:

if(!ValidateForm()) { ... 

Bạn thể thử nghiệm chống lại các sai lầm liên tục, nhưng nó khá xấu xí và thường tán thành:

if(ValidateForm() == false) { ... 
8

Bạn không cần gọi số ValidateForm() hai lần như bạn đã nói ở trên. Bạn chỉ có thể làm

if(!ValidateForm()){ 
.. 
} else ... 

Tôi nghĩ rằng sẽ giải quyết vấn đề như trên có vẻ như so sánh của bạn true/false vào chuỗi tương đương 'false'.

+0

Vấn đề là, nếu tôi không bao gồm 'ValidateForm();' trên hàm 'post()' .. các thông báo lỗi không hiển thị .. – Ken

+0

Trong ví dụ của bạn, câu lệnh if sẽ luôn luôn sai, bởi vì hàm của bạn trả về true hoặc false, nó sẽ KHÔNG BAO GIỜ trả về 'false'. Loại bỏ các dấu nháy đơn khỏi mã của bạn xung quanh 'false' và nó sẽ hoạt động. Tuy nhiên, các đề xuất tôi đã thực hiện sẽ cải thiện mã của bạn - địa chỉ sau khi bạn đã sửa mã của mình. – JDandChips

+0

Sử dụng .length trên thứ gì đó có thể không xác định là nguy hiểm. khi nó được, trên thực tế, không xác định, nó sẽ trả về lỗi "không thể gọi chiều dài trên undefined" hoặc một cái gì đó tương tự. Khó để xem như trong trường hợp cụ thể này nó sẽ gây ra một trang làm mới. – NoobishPro

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