【问题标题】:jQuery Dialog, checkboxes and setting values outside the modaljQuery 对话框、复选框和模式外的设置值
【发布时间】:2010-05-17 18:59:07
【问题描述】:

在使用 jQuery UI 对话框和在其中使用复选框值时遇到一些问题。我所拥有的是一个表格,其中包含前几个选项和一个显示“更多”的链接。当用户单击它时,他们会打开一个对话框,并且可以从完整的选项列表中进行选择。

对于第一批复选框(不在对话框中),我将它们的值设置为单击时的隐藏字段,然后在提交表单时使用该字段:

HTML

<div class="col cuisines cuisineSelect">
<ul>
<li><input name="cuisine" value="165" type="checkbox" id="c-165"><label for="c-165">British</label></li>
<li><input name="cuisine" value="911" type="checkbox" id="c-911"><label for="c-911">Chinese</label></li>
<li><input name="cuisine" value="1047" type="checkbox" id="c-1047"><label for="c-1047">European</label></li>
</ul>
</div>

添加到隐藏字段的Javascript

$(function() {
   $('.cuisineSelect input').click(updateHiddenCuisineValues);
   updateHiddenCuisineValues();
});

function updateHiddenCuisineValues() {
  var allVals = [];
  $('.cuisineSelect :checked').each(function() {
  allVals.push($(this).val());
  });
  $('#cuisineString').val(allVals)
}

这很好用,我可以在我的#cuisineString 中看到它正在填充。

但是我的对话框,我是通过以下方式生成的:

对话框 Javascript

$("#moreCuisines").click(function(){
    $("#cuisineExtra").dialog({
       width: '200',
       dialogClass: 'cuisineSelect',
       buttons: {
          "Refresh Search": function() {(
              $(this).dialog("close")
           );}
       },
     });
   return false; 
})

对话框 DIV HTML

<div id="cuisineExtra" class="hiddenSearchPanel" title="Available Cuisines">
<div class="col">
<ul>
<li><input name="cuisine" value="165" type="checkbox" id="ch-165"><label for="c-165">British</label></li>
<li><input name="cuisine" value="911" type="checkbox" id="ch-911"><label for="c-911">Chinese</label></li>
<li><input name="cuisine" value="1047" type="checkbox" id="ch-1047"><label for="c-1047">European</label></li>
<li><input name="cuisine" value="166" type="checkbox" id="ch-166"><label for="c-166">French</label></li>
<li><input name="cuisine" value="167" type="checkbox" id="ch-167"><label for="c-167">Indian</label></li>
<li><input name="cuisine" value="1027" type="checkbox" id="ch-1027"><label for="c-1027">Indonesian</label></li>
</ul>
</div>
</div>

我看不到的是,如果我单击此处的复选框,它不会填充到 DIV 中,但是如果我关闭它并单击对话框外的一个复选框,它不仅会填充 #cuisineString 与最新点击,但我在对话框中检查的所有点击。

我确定我需要添加一些东西,但我们的头发已经被撕成原来的样子了!

最后,我应该提出一个新问题,但如果有人有想法,我还想做的是,如果有人说在对话框或页面上点击“英国”,那么它应该选中两个框对话框和原始对话框,并将值添加到#cuisineString,因为我将前几个选项加倍。

【问题讨论】:

    标签: jquery jquery-ui dialog


    【解决方案1】:

    编辑: 因为 JQuery 对话框将您的“弹出”-div 复制到它自己包含的 div 中,所以复选框会丢失您绑定到点击事件的功能。如果您改为使用这样的实时功能,它应该可以按照您的意愿工作:

    $(function() {
       $('.cuisineSelect input').live('change',updateHiddenCuisineValues);
       updateHiddenCuisineValues();
    });
    

    代替:

    $('.cuisineSelect input').click(updateHiddenCuisineValues);
    

    要回答关于如何在对话框内外同步复选框的问题的最后一部分,我想出了这个解决方案:

    function updateHiddenCuisineValues() {
      //the next four lines checks or de-checks any checkboxes with same name and value as the one just clicked
      if($(this).is(':checked'))
        $('[name="'+$(this).attr('name')+'"][value="'+$(this).attr('value')+'"]').attr('checked','checked');
      else
        $('[name="'+$(this).attr('name')+'"][value="'+$(this).attr('value')+'"]').removeAttr('checked');
      var allVals = [];
      $('.cuisineSelect :checked').each(function() {
        if($.inArray($(this).val(),allVals) == -1) //this ensures that the same value won't be added more than once
          allVals.push($(this).val());
      });
      $('#cuisineString').val(allVals)
    }
    

    它可能不漂亮,但它可以完成工作;)

    【讨论】:

    • 在 jQuery 代码中使用dialogClass: 'cuisineSelect' 来制作对话框,这似乎将其添加到其中...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多