在ajax函数中隐藏jquery元素

Posted

技术标签:

【中文标题】在ajax函数中隐藏jquery元素【英文标题】:hide jquery elements in an ajax function 【发布时间】:2018-08-13 20:19:25 【问题描述】:

我正在尝试使用 jquery 和 $.ajax () 方法提交表单。将信息提交到服务器时,我只希望保留结果并隐藏页面的其余部分。我是否能够在 ajax 方法中添加一个条件,说明“if(success) 然后显示结果,同时隐藏 h1、h2 和 p 元素(只留下返回的文本;else if (error) 然后只显示错误消息在页面底部的 div 占位符内,没有 .hide()-ing 任何元素。因此,在 ajax 方法成功后,我希望隐藏除 div 占位符中返回的文本之外的所有元素。如果发生错误(表单留空)然后在 div 占位符中显示错误消息,同时保留所有元素。

更新:

当我在示例中使用警报时,它们总是显示为成功。 ajax/jquery 无法识别我的 if 语句。知道这里可能发生了什么吗?

html

 <form id="form" action="form.php">
     <label for="name">Name: </label>
     <input type="text" id="name" name="name">

     <label for="phone">Phone: </label>
     <input type="text" id="phone" name="phone">
</form>

<input type="submit" id="clickMe" value="Send" class="clear">

<p id="display"> </p>

jQuery/Ajax

$(document).ready(function() 
    $("#clickMe").click(function(event)
        event.preventDefault();
        var myData = $('#form').serialize();    

        $.ajax(
            url: 'form.php',  
            data: myData,    
            success: function (result) 
                $('#display').html(result);

             if(myData.indexOf("Thank"))
                        alert("success")
                     
            ,
            error: function (xhr, status, error) 
                $('#display').html("Error: " + xhr.status + " " + xhr.statusText);

             if(myData.indexOf("Something went wrong"))

                        alert("error");
                    
            
        );
    ); 
);

PHP

 if(!empty($_GET['name'])

  echo "Thank you for your messsage ";


else 
    echo "Something went wrong.;

【问题讨论】:

什么 CSS/样式?我在您的代码中没有看到任何内容。 你的css在哪里? @Rens;抱歉,基本上我只想在信息通过服务器并返回后显示部分 html(表单信息)。因此,如果出现错误,我会在页面底部收到一条错误消息,如果成功,我希望隐藏所有内容,但显示(结果)。我尝试使用 $('h1 , h2, #p1, input').hide();" 但即使是错误也会隐藏所有内容。我只希望它在 ajax 成功时隐藏。不确定是否可以使用带有 ajax 选项的条件?? 你能否改变你提出这个问题的方式,这是一个奇怪的问题:“我只希望保留结果,但只保留表单的部分” 很抱歉。我想使用 hide 方法隐藏除了表单返回的结果之外的所有内容。如果出现错误,则不应“隐藏”任何内容。 【参考方案1】:

试试这个

   $('#display').text(result);

希望对你有帮助

我认为添加类更好。例子 在你的 CSS 中

.test background-color:#000000;

成功

  $('#display').addClass("test");

也可以直接添加

$('#display').css('background-color','block');

我认为你的问题出在你的 CSS 中。

你忘了添加你的 ajax。

 type: "post"

【讨论】:

有没有办法将它合并到 ajax 的成功选项中?如果我们成功了,那么它会隐藏除结果和原始 css 之外的所有内容? 这样基本剥离了所有的HTML,跟CSS没多大关系? 什么意思?它会隐藏一切,结果会保留吗? 我想使用 hide 方法隐藏所有内容,但成功后的结果 我修改了我的问题,也许这有帮助?【参考方案2】:

由于您没有显示任何进行验证的 PHP 代码,我不知道您的代码看起来如何,但您必须执行以下操作:

以下内容应放在form.php 文件的顶部:

if(isset($_POST['name']))

    // return either true/false depending on validation

    // By default set the success message
    $success = true;
    $message = 'My success message';

    // now do your conditional checks and based on that change to false

    // Example: when validation fails on name:
    if($_POST['name']=='')
        $success = false;
        $message = 'My error message: (Name is a required field)';
       

    // convert array to json, so we can read it out nicely on ajax return
    echo json_encode($result);

    // stop rest of our code
    exit;

然后将你的ajax成功改为:

请注意:

从 jQuery 3.0 开始,$.parseJSON 已弃用。要解析 JSON 字符串,请改用本机 JSON.parse 方法。

success: function (result) 
   // Read the json string to proper object, for jQuery 3.0+ use native method instead
   var $data = jQuery.parseJSON(result);

   // Check if there where no validation problems
   if($data.success==true)
       // Write success message to DOM element
       $('#display').html($data.message);
   else
       // Write error message to DOM element
       $('#display').html($data.message);
   
,

【讨论】:

以上是关于在ajax函数中隐藏jquery元素的主要内容,如果未能解决你的问题,请参考以下文章

隐藏后显示元素时JQuery位置没有信息

如何从 jQuery 数据表中的 ajax 数据源获取 mRender() 函数中的隐藏列值

在Ajax调用之后重新触发Jquery脚本

如何在 jquery ajax 成功函数中引用调用 dom 元素?

jQuery - 在 AJAX 调用之后,旧元素仍然存在于 DOM 中吗?如何去除?

在jquery / ajax中分页