【问题标题】:Why does an ajax request not trigger validation为什么ajax请求不会触发验证
【发布时间】:2014-01-06 15:11:45
【问题描述】:

我有一个动态生成的表单。表单内部是一个执行 AJAX 请求的函数,成功后,修改用于验证的隐藏字段的值(将其设置为空字符串)。(隐藏字段设置为 "required:true" )

但是,在函数成功执行后,隐藏字段不会触发 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?另外,我如何在函数成功执行时触发验证,而不是仅与其他错误?

【问题讨论】:

  • #ItemDetailsContainer的change事件加载后需要订阅。
  • id为ItemDetailsContainer的元素是什么?你还没有在你的 HTML 中显示出来。从名字上看,它听起来像一个 div,我不相信它有原生的 change 事件。

标签: javascript jquery ajax validation


【解决方案1】:

使用 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

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

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多