当前位置: 首页 > 面试题库 >

表单提交错误后显示基于Ajax的元素

郑衡
2023-03-14
问题内容

我的表单中有两个选择元素,类别和子类别。首先,仅显示类别选择。当用户在类别选择中进行选择时,AJAX请求将发送到服务器,并显示子类别选择。它工作正常。

现在,当表单提交中由于任何原因,缺少某些必需的值或任何原因而出现错误时,我将显示错误消息,但是我无法保留选择框的相同状态,我只会看到类别选择,未选择任何值,即初始状态。谁能建议我如何保留这些选择元素的状态?

这是我新表单中的代码段:

    <div id="category-select">
    category <%= collection_select :post_category, :id, @categories, :id, :name, 
                                                options = {:prompt => "Select a category"} %>
    </div>
    <div id="sub-category-select">
    </div>

这是我的jQuery脚本,当对Category select进行选择时,它将发送AJAX请求:

$("#post_category_id").change(function() {
  var category_id = $('select#post_category_id :selected').val();
  if(category_id == "") category_id="0";
    $.get('/posts/update_sub_cat/' + category_id, function(data){
       $("#sub-category-select").html(data);
    })
  return false;
});

AJAX请求是在post_controller中的 update_sub_cat 操作上提出的,如下所示:

def update_sub_cat
  if params[:id].present?
    @sub_categories = Category.find_all_by_parent_id(params[:id])
  else
    @sub_categories = []
  end
  respond_to do |format|
    format.js
  end

结束

AJAX请求呈现了 update_sub_cat.js.erb 文件,其中使用了一些HMTL

sub-category <%= collection_select :post_sub_category, :id, @sub_categories, :id, :name, 
                                        options = {:prompt => "Select a sub-category"} %>

我知道,我不应该在这里直接使用HTML,而应该使用$(’sub-category-
select).append(…),但是我可以使它像这样工作,并计划在以后进行更改。

这是我程序的这一部分所涉及的所有代码。

有人可以帮我吗?


问题答案:

我解决了问题,并获得了基于AJAX的元素来维护状态。这是我的jQuery代码:

$('#before_category_select').loadPage();

jQuery.fn.loadPage = function(){
if($("#new-post-area").length > 0){
    $.getJSON('/home/cat_select_state.json', function(data){
        $.get('/posts/update_sub_cat/' + data.cat_state, function(data1){
           $("#sub-category-select").html(data1);
        })
    });
   }
}

我为获取select元素的状态而调用的控制器操作,该操作在页面提交时存储为会话变量:

  def cat_select_state
    @cat_session = {:cat_state => session[:new_post_category], :sub_cat_state => session[:new_post_sub_category]}
    respond_to do |format|
      format.json {render :json => @cat_session}
    end
  end

最后,我为选择框使用了默认值,这些默认值存储为会话变量。如果会话变量为null,则默认值为选择框的提示消息。

<%= collection_select :post_category, :id, @categories, :id, :name, 
                                                options = {:prompt => "Select a category", :selected => session[:new_post_category]} %>

子类别选择元素的HTML呈现在javascript文件update_sub_cat.js.erb中。

sub-category <%= collection_select :post_sub_category, :id, @sub_categories, :id, :name, 
                                        options = {:prompt => "Select a sub-category"} %>

请提出您是否还有其他改进建议。



 类似资料:
  • 本文向大家介绍jQuery基于Ajax方式提交表单功能示例,包括了jQuery基于Ajax方式提交表单功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery基于Ajax方式提交表单功能。分享给大家供大家参考,具体如下: 提交表单一般通过同步的方式提交,提交后页面刷新或跳转到新页面来显示服务器端返回的处理结果。如果表单提交后有另外的操作或业务需求需要还在这个页面上显示或处理,那

  • Framework7 可以通过ajax自动提交 有两种自动提交方式: 当用户提交了表单 (点击了提交按钮) 或者当通过代码触发了 "submit" 事件 当用户更改了表单的内容,或者当通过代码触发了 "change" 事件 submit时提交表单数据 只需要添加 "ajax-submit" class 在form上,当submit时就会自动通过ajax发送表单数据 <form action="se

  • 本文向大家介绍Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作,包括了Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作的使用技巧和注意事项,需要的朋友参考一下 本教程基于Laravel 5.4 开始之前首先准备好开发环境,我们假设你已经安装好 Laravel,至于 Vue 的引入,请参考官方文档。 做好上述准备工作后就可以开始我们的开

  • 问题内容: 我是stackoverflow和CodeIgniter的新手,目前正在尝试在Internet上找到的一些简单代码示例,以开始使用。我现在正在处理的是一种使用CI和Ajax(jQuery)的表单,并将表单的输入保存在数据库中,然后在表单的同一页上显示最新的表单。如果我感到困惑,那是这里的4.7应用示例。最初的源代码位于此处,但为了与最新版本的CI配合使用,我对其进行了修改,并在下面引用了

  • Jquery Mobile会自动通过ajax处理表单的提交,并在表单页面和结果页面之间创建一个平滑的转场效果。注意请在form元素上正确设定action 和method属性,保证表单的提交。如果没有指定,提交方法默认为get,action默认为当前页的相对路径(通过$.mobile.path.get()方法取得 表单也可以像链接一样指定转场效果的属性,比如data-transition="pop"

  • 问题内容: 此代码正确吗?我正在尝试提交,如果文本区域再次为空,我也想提交。 我正在尝试上传: 谢谢… 问题答案: 用 代替 如果您使用的是最新版本的jquery。