【问题标题】:keep checkboxes checked after page refresh页面刷新后保持复选框处于选中状态
【发布时间】:2012-02-27 21:31:21
【问题描述】:

我有几个复选框。当它们中的任何一个被单击/检查并单击搜索按钮时,将获取它们的值并作为查询字符串传递给 url 并刷新页面,返回与传递的查询值匹配的结果。 像这样:mysite.com/result.aspx?k="Hospital" OR "Office" OR "Emergency"

我能够获取 'k=' 之后的值。我将“医院”或“办公室”或“紧急情况”捕获并存储在一个变量中。现在我需要在页面重新加载并忘记控件的先前状态后根据这些值重置复选框的选中状态。我不能再进一步了。有人可以帮我吗?

  var checkedOnes=decodeURI(location.href.match(/\&k\=(.+)/)[1]);
        if (value.length == 2) {
            $('input[name="LocType"][value="' + value[1] + '"]').prop('checked', true);
        }  

这就是我捕获复选框值并传递给 URL 的方式:

var checkboxValues = $("input[name=LocType]:checked").map(function() {
        return "\"" + $(this).val() + "\"";}).get().join(" OR ");

    window.location= url+checkboxValues;

    <div class="LocTypeChkBoxesSearch">
    <div class="LocTypeChkBoxes">
        <input name="LocType" type="checkbox" value="Hospital"/>HOSPITALS&#160;&#160;
        <input name="LocType" type="checkbox"  value="Office"/>  PHYSICIAN OFFICES&#160;&#160;
        <input name="LocType" type="checkbox"  value="Emergency"/>EMERGENCY CENTERS&#160;&#160;
        <input name="LocType" type="checkbox"  value="Out-Patient"/>OUT-PATIENT CENTERS&#160;&#160;
        <input name="LocType" type="checkbox" value="Facility"/>FACILITIES
    </div>
    <div class="searchBtnHolder"><a class="searchButton" href="#" type="submit" ><span>GO</span></a></div>
</div>

【问题讨论】:

  • 您是否考虑过改用 localStorage ?
  • 不是所有浏览器都支持html5吗??!!
  • 检查 cookie,您将不得不将它们实际保存在我认为的某个地方,并且由于您表示服务器端已退出,因此似乎会话不是一个选项。

标签: javascript jquery state checkbox persist


【解决方案1】:

我也遇到过同样的问题,我的解决方案是 HTML5 Local Storage。 添加收集复选框值的功能

function(){
var data = $('input[name=checkboxName]:checked').map(function(){
        return this.value;
    }).get();
    localStorage['data']=JSON.stringify(data);
}

和 onload 函数来检查复选框

function(){
    if(localStorage&&localStorage["data"]){
        var localStoredData=JSON.parse(localStorage["data"]);
        var checkboxes=document.getElementsByName('checkboxName');
        for(var i=0;i<checkboxes.length;i++){
            for(var j=0;j<localStoredData.length;j++){
                if(checkboxes[i].value==localStoredData[j]){
                    checkboxes[i].checked=true;
                }
            }
        }
        localStorage.removeItem('data');
    }
}

这对我来说很好。

【讨论】:

    【解决方案2】:

    您不应该为此需要 JavaScript。您可以检查后端代码中的 $_GET 参数,并使用正确的表单元素属性为页面提供服务。

    以 PHP 为例:

    <input name="LocType" type="checkbox" value="Facility" <?php if (isset($_GET['LocType'] && $_GET['LocType'] == 'Facility') { ?> checked="checked" <?php } ?> /> FACILITIES
    

    【讨论】:

      【解决方案3】:

      试试这个。

      //Split the url parameter value and get all the values in an array
      var checkedOnes = decodeURI(location.href.match(/\&k\=(.+)/)[1]).split(" OR ");
      
      //Find all the checkbox with name="LocType" and cache them in local variable
      var $checkBoxes = $('input[name=LocType]');
      
      //Loop through the array and find the corresponding checkbox element using filter
      $.each(checkedOnes, function(i, val){
          $checkBoxes.filter('value=[' + $.trim(val.replace(/\"/g, '')) +']').prop('checked', true);
      });
      

      我将k 的值除以OR,这将给出数组中的所有值。接下来,遍历数组,通过匹配其value属性找到对应的复选框,并使用prop方法将其checked属性设置为true

      【讨论】:

      • 除非您在“每个”函数中包含此变量,否则这将如何获取所有复选框?var $checkBoxes = $('input[name=LocType]');
      • 您不必将其保存在 each 循环中。我将其保留在外面并将结果缓存到变量中的原因是避免在循环中一次又一次地找到所有复选框。
      • 整个逻辑必须在 document.ready() 中??它不起作用。我知道我很接近.. :(
      • 在运行each 循环之前,您能检查一下checkedOnes 的值吗?
      • 确保在$(document).ready(function(){..}) 中运行此代码,以便在尝试查找和设置元素之前可用这些元素checked
      猜你喜欢
      • 2020-09-16
      • 2016-06-02
      • 2021-04-30
      • 2021-04-24
      • 2011-03-11
      • 1970-01-01
      • 2014-08-29
      • 2021-11-01
      • 2013-01-21
      相关资源
      最近更新 更多