【问题标题】:Keeping JQuery CSS settings on failed form submit在表单提交失败时保持 JQuery CSS 设置
【发布时间】:2016-08-16 03:46:53
【问题描述】:

在我创建的 wordpress 上,我使用下拉菜单通过 JQuery 显示 3 个隐藏表单中的 1 个。

第一个问题是当表单无效(即缺少字段、错误电子邮件等)时,表单会重置页面,因此在您再次从下拉列表中选择该表单之前,所有内容都不再可见。

第二个是表单是插件,所以我不直接访问提交操作,如果我要进入插件文件,它可能会在不久的将来被更新覆盖。

HTML:

<div class="ginput_container ginput_container_select">
<select id="app_pick" class="medium gfield_select">
    <option value="">Choose Here</option>
    <option value="Greek_Dance">Greek Dance</option>
    <option value="Greek_School">Greek School</option>
    <option value="Youth_Group">Youth Group</option>
</select></div>

查询:

    jQuery(document).ready(function($){

        $('#gform_wrapper_3').hide();


    $('#app_pick').on('change', function() {
  if ( this.value == ''){
    $('.f1').css('display', 'none');
     $('.f2').css('display', 'none');
      $('.f3').css('display', 'none');
  }
  else if ( this.value == 'Greek_Dance'){
    $('.f1').css('display', 'block');
     $('.f2').css('display', 'none');
      $('.f3').css('display', 'none');
  }
  else if ( this.value == 'Greek_School'){
    $('.f1').css('display', 'none');
     $('.f2').css('display', 'block');
      $('.f3').css('display', 'none');
  }
 else if ( this.value == 'Youth_Group'){
    $('.f1').css('display', 'none');
     $('.f2').css('display', 'none');
      $('.f3').css('display', 'block');
  }
else {
    $('.f1').css('display', 'none');
     $('.f2').css('display', 'none');
      $('.f3').css('display', 'none');
  }

});

    });

F1,F2,F3 分别为 Display: none 默认形式。

我的目标是让下拉列表中选择的表单停留在 Display: block;提交后。

【问题讨论】:

  • 我认为问题是如果页面被提交并且它强制页面重新加载那么你还将重新加载所有的 js 等,所以你需要转换为 ajax 尝试或以某种方式 js cookie 等
  • 您需要发布更多代码。如果不是 HTML &lt;form&gt; 标记中的简单 action,则发布显示的表单和提交时处理的 jQuery
  • 如果您可以使用 js cookie 或 ajax 提交某种答案,我会更愿意尝试一下。我对这两个领域的了解非常有限,但是如果在这方面有什么我可以做的,我对 php 很有经验。
  • @Steve 我很难找到表单正在处理的 jquery。该方法是发布的,所以在提交时它可能会刷新然后执行任何 jquery,不包括我自己的,这在刷新后无论如何都需要人工输入,除非有某种方法可以通过帖子保存该信息。

标签: jquery html css forms


【解决方案1】:

我稍微重构了您的解决方案以摆脱 if-else 构造:

var form = localStorage.getItem('showForm');
if (form) {
  $('.' + form).show();
  $('#app_pick').val(localStorage.getItem('option'))
}

$('#app_pick').on('change', function() {
  var showForm;

  $('.f1, .f2, .f3').hide();

  switch (this.value) {
    case 'Greek_Dance':
      $('.f1').show();
      showForm = 'f1';
      break;
    case 'Greek_School':
      $('.f2').show();
      showForm = 'f2';
      break;
    case 'Youth_Group':
      $('.f3').show();
      showForm = 'f3';
      break;
  }
  localStorage.setItem('showForm', showForm);
  localStorage.setItem('option', this.value);
});

我在这里所做的是将选定的值及其随附的表单保存到 localStorage 中,以便在页面重新加载时使用它。


Example

【讨论】:

  • 这实际上似乎与刷新一起工作,还没有在帖子上测试过。这完全跨浏览器兼容吗?也是使用 display: none over visibility: hide 的原因,它不会占用任何空间。
  • @Flo 请参阅here 了解本地存储的浏览器支持。其他一切都是普通的 JS 或基本的 jQuery,所以它应该可以工作。
  • @Flo .hide() 在 jQuery 中将始终将元素设置在 display:none;.show()display:block;
  • @Flo 您可以使用sessionStorage 代替localStorage。然后在用户关闭页面或浏览器后,这些值将被重置。或者您可以在一定时间后手动拨打localStorage.removeItem()This 可以帮到你。
  • @Flo 如果您网站的浏览器选项卡在这种情况下已关闭,那么是的
猜你喜欢
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
相关资源
最近更新 更多