2014-01-06 138 views
0

我有一個動態生成的表單。表單內部是執行AJAX請求的函數,成功時修改用於驗證的隱藏字段的值(將其設置爲空字符串)(隱藏字段設置爲「required:true」)爲什麼ajax請求不能觸發驗證

但是,在成功執行該函數後,隱藏字段不會觸發jQuery的驗證,我可以提交表單。只有當我有意識地觸發其他字段的驗證時纔會觸發隱藏字段的驗證,並且會出現隱藏字段的錯誤消息以及其他錯誤消息。

功能:

function DeleteImageDP(){ 

    var itemid=$('#DisplayDeleteItemID').val(); 
    var filepath=$('#DisplayDeleteFilePath').val(); 
    var itempicid=$('#DisplayDeleteItemPicID').val(); 
    var cfm=confirm("Confirm deletion of picture? (Note: Picture wil be deleted permanently."); 
    if(cfm == true) 
    { 
     $.ajax({ 

     url:"delete/deletedp.php", 
     type:"POST", 
     data:"ItemID="+itemid+"&FilePath="+filepath+"&ItemPicID="+itempicid, 
     success:function(){ 

      alert("Image successfully deleted."); 
      $('#ImagePreviewDP').prop('src','').hide(); 
      $('#ImagePreviewDPValidate').val(''); 
      $('#DisplayDelete').hide(); 

     }, 
     error:function(){ 

      alert("Image could not be deleted due to an error."); 

     } 

     }); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

}; 

驗證:

$('#ItemDetailsContainer').on('change',function(){ 
    //Validation code ..... 
    ImagePreviewDP:{ 
     required:true 
    }, 
    //More validation code.... 
}); 

表(摘錄):

//Input and preview for Display Pic 
echo"<div class='BizEditItemDetails' >"; 
    //More code above 
    echo"<img id=ImagePreviewDP name=ImagePreviewDP class='ImagePreview' src=\"$dp\" > "; 
    echo"<input type='hidden' id='ImagePreviewDPValidate' name='ImagePreviewDPValidate' value=\"$dp\" >"; 
    //More code below 
echo"</div>"; 

爲什麼不設置的$( 「#ImagePreviewDP」)的值一個空字符串觸發on.change?還有如何得到驗證觸發成功執行的功能,而不是它只會與其他錯誤一起觸發?

+0

你必須訂閱'#ItemDetailsContainer'的變化時它加載後觸發。 –

+0

什麼是ID爲ItemDetailsContainer的元素?你沒有在你的HTML中顯示。從名字來看,這聽起來像一個div,我不相信有一個本地的「變化」事件。 – Travesty3

回答

2

通過編程設置JavaScript的元素值永遠不會觸發onchange事件,你必須自己

$.ajax({ 

    url:"delete/deletedp.php", 
    type:"POST", 
    data:"ItemID="+itemid+"&FilePath="+filepath+"&ItemPicID="+itempicid, 
    success:function(){ 

     alert("Image successfully deleted."); 
     $('#ImagePreviewDP').prop('src','').hide(); 
     $('#ImagePreviewDPValidate').val(''); 
     $('#DisplayDelete').hide(); 

     $('#ItemDetailsContainer').trigger('change'); 
    //  ^^ trigger event handler 

    }, 
...........