0

假设我们有 5 个复选框,每个复选框都有唯一的值映射到各自的元素列表,就我而言,我有关联的 PHP 数组 -

[100] => Array ( [0] => Array ( [name] => NameABC [sid] => 109 ) 
                 [1] => Array ( [name] => NameDEF [sid] => 110 ) 
               ) 

[101] => Array ( [0] => Array ( [name] => NamePQR [sid] => 337 ) 
                 [1] => Array ( [name] => NameXYZ [sid] => 339 ) 
               ) 

因此可以将值映射到每个列表,现在通过复选框的属性,您可以选择多个复选框(与单选按钮不同),因此当出现这种情况时,会根据每个复选框选择填充下拉列表,现在以合并格式出现,例如在选择 OPTION 1 和 OPTION 2 时,列表包含映射到两者的所有元素,进一步取消选择它会返回未合并状态。

4

2 回答 2

0

也许我过度简化了问题或遗漏了一些关键信息,但你能不能:

$merged = array();
foreach ($list as $l)
{
    $merged[] = $l;
}

$list 是包含键 [101]、[102] 等的数组在哪里?

这会给你留下:

$merged = Array (
            [0] => Array ( [name] => NameABC [sid] => 109 )
            [1] => Array ( [name] => NameDEF [sid] => 110 )
            [2] => Array ( [name] => NamePQR [sid] => 337 ) 
            [3] => Array ( [name] => NameXYZ [sid] => 339 )
          )

或者如果sid对所有数组都是唯一的,也许这会更合适:

$merged = array();
foreach ($list as $l)
{
    $merged[$l['sid']] = $l['name'];
}

给你:

$merged = Array (
            [109] => NameABC
            [110] => NameDEF
            [337] => NamePQR
            [339] => NameXYZ
          )
于 2012-05-09T11:04:26.940 回答
0

最后,在对我自己的问题进行迭代之后,我找到了几乎正确的答案。以下是我在此使用的HTML片段——

<tr>
<td align="center"  bgcolor="#BFD5EA" width="30%"><font size="1" face="Verdana"><b>Sales Channel :&nbsp;</b></font></td>
<td bgcolor="#E4E4E4" colspan="5"><font size="1" face="Verdana" width="70%">
~foreach from=$sales_channel item=r`
    <input type="checkbox" name="salestype[]" value="~$r.ROLE`"  id="~ $r.NAME`" >~$r.NAME`&nbsp;
~/foreach`
</td>
</tr>   
<tr style="display: none" id="nafrat"><td align="center"  bgcolor="#BFD5EA" width="30%"><font size="1" face="Verdana"><b>List of Executives:</font></b></td>
<td bgcolor="#E4E4E4" colspan="5" width="70%">
    <select name="selOnlSrc[]"  id="myops" multiple size="10" ><!--@@@@Done-->
    ~foreach from=$assigner key=k item=r`
        ~foreach  from=$r item=m`
            <option id="allexec" value="all" selected>All</option>
            <option class="~$k`" class="searchSelect"  style="display: none"   value="~$m.execid`">~$m.display_name`</option>
        ~/foreach` 
    ~/foreach` 
    </select> 
</td>                          

现在最重要的是 jquery 部分——

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript">  </script>
<script>
$(document).ready(function() {

$("input[name=salestype[]]:checkbox").click(function() {
  var selected = new Array();
  $('#nafrat').show();
  $("input:checkbox[name=salestype[]]:checked").each(function() {
    selected.push($(this).val());
    });
  $('#myops').children('option').hide();
  var btnchk= new Array();
  btnchk = $('input:checkbox[name="salestype[]"]:checked');

  if (btnchk.length) {
  $('#allexec').show();
  }
  else {
  $('#allexec').hide();
  $('#nafrat').hide();
  }
  $.each( selected, function(i, l){
      $('.'+l).show();
      });
  selected = new Array();
  btnchk  = new Array();

});
</script>

为此,我可以在选择两个或多个复选框时合并下拉列表中的值,并进一步取消选中任何一个,从下面的列表中删除相应的内容。

注意:上面显示的HTML包含smarty标记,还有一些PHP变量,如“$assigner”等。

于 2012-05-16T07:45:11.937 回答