2013-01-16 263 views
1

我想上傳一個文件。並使用此代碼jquery防止表單提交

$(document).ready(function() { 
    $('#form_model_upload').submit(function (e) { 
    var isvalid = true; 
    var val = $('#model').val(); 
    if (!val || val == "") { 
     $('#err_model').html('please select an image'); 
     isvalid = false; 
    } else { 
     var ext = $('#model').val().split('.').pop().toLowerCase(); 
     if ($.inArray(ext, ['gif', 'jpg', 'jpeg']) == -1) { 
     $('#err_model').html('invalid file extension').show(); 
     isvalid = false; 
     } 
    } 
    return isvalid; 
    }); 
}); 

這裏是我的html代碼

<form action="<?php echo $editFormAction; ?>" method="POST" name="form_model_upload"> 
     <input type="hidden" name="vendor_id" value="<?php echo $_SESSION['vendor_id']?>" /><tr><td></td><td><span id="err_model"></span></td></tr> 
     <tr><td>Model:</td><td><input type="file" name="model" id="model"/></td> 
     </tr> 

     <tr><td>Description:</td><td><textarea rows="5" cols="30" name="description" id="description" ></textarea></td></tr> 
     <tr><td>Category:</td><td><select name="category_model" id="category_model"> 
     <?php $categories=$doc->getElementsByTagName("category"); 
     foreach($categories as $category) 
     {//$category_node=$category->getElementsByTagName("cat_val"); 
     $category_value=$category->nodeValue; 
     echo '<option value="'.$category_value.'">'.$category_value.'</option>'; 
     }?> 

     </select> </td></tr> 
     <tr><td></td><td><input type="submit" name="upload_submit" id="upload_submit" value="upload" /></td></tr> 
     <input type="hidden" name="MM_insert" value="upload_model" /> 
     <input type="hidden" name="MM_insert" value="form_model_upload" /> 
     </form> 

,但其提交,即使驗證失敗的形式驗證它? 我想阻止驗證失敗的表單提交失敗。

+0

'e.preventDefault();'或'return false;'在'isvalid = false;'的地方或者在'return isvalid;'之後。 – Jai

+0

當你錯誤地提交時,你能向我們展示一個例子嗎?你能發佈你的HTML嗎? – Alexander

+0

您的代碼適用於我。 http://jsfiddle.net/9z69G/ –

回答

0
$(document).ready(function() { 
    // move this var outside of submit 
    var isvalid = false; 
    $('#form_model_upload').submit(function (e) { 
    // block submit if false (it will be the first time) 
    if(!isvalid){ e.preventDefault(); } 
    // set true state here before the validation test 
    isvalid = true; 
    var val = $('#model').val(); 
    if (!val || val == "") { 
     $('#err_model').html('please select an image'); 
     isvalid = false; 
    } else { 
     var ext = $('#model').val().split('.').pop().toLowerCase(); 
     if ($.inArray(ext, ['gif', 'jpg', 'jpeg']) == -1) { 
     $('#err_model').html('invalid file extension').show(); 
     isvalid = false; 
     } 
    } 
    // if form is valid, submit form 
    // isvalid is now true so e.preventDefault() wont fire 
    if(isvalid){ 
     $(this).submit(); 
    } 
    }); 
}); 
+0

請你解釋一下 $(@)。submit(); – Kamran

+0

對不起,我是在咖啡標記模式。它應該是$(this).submit();這會觸發表單提交併再次運行該函數。 – Fresheyeball