【问题标题】:restoring the state of checkboxes from an array of 0 and 1s从 0 和 1 的数组中恢复复选框的状态
【发布时间】:2015-03-22 15:07:58
【问题描述】:

我想以 ORACLE APEX 表格形式恢复复选框的状态。 使用 APEX 行选择器 f01 在第一列中进行选择。

我将复选框状态保存在一个集合中,然后从那里保存到一个数组中 在名为 P250_JSON 的区域项中,其中 P250_JSON 的值 是一个字符串:'[1,0,0,1,0,0,0,0,0]' 例如如果第一个和第四个 行被选中。

从这个数组[1,0,0,1,0,0,0,0,0]

我想以编程方式单击表格形式的第 1 行和第 4 行元素 并在需要时恢复原来的选择。

Jquery 的初学者,但我已经走到了这一步:

var x = $v("P250_JSON");
var arrBoxes = jQuery.parseJSON(x);


$.each(arrBoxes,
      function(index,val){
      $("input[name='f01']").attr("checked","checked");
                           });

显然这会检查所有复选框,所以缺少一些东西。

第 16 行的 HTML 为: label for="f01_0015" class="hideMeButHearMe">选择行/标签输入类型="checkbox" name="f01" value="15" class="row-selector" id="f01_0015"

任何帮助表示赞赏。

【问题讨论】:

  • 因为$("input[name='f01']")选中了所有的复选框...它不会神奇地知道你想要哪个,你需要告诉它是哪个。
  • 没错。这就是问题所在。需要一起循环遍历数组和行并检查数组具有“1”的行。如何使用 Jquery 做到这一点?

标签: javascript jquery arrays checkbox oracle-apex


【解决方案1】:

这假定您要检查的所有复选框都命名为<input name="f01" />。如果不是,那么您需要在问题中显示一些标记。

var arrBoxes = [1,0,0,1,0];

var checkboxes = $("input[name='f01']"); //get all the checkboxes
$.each(arrBoxes, //loop through your array
  function(index, val) {
    checkboxes.eq(index) //get the current checkbox
      .prop("checked", val === 1); //set checked state based on index value
  }
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" name="f01" />
<input type="checkbox" name="f01" />
<input type="checkbox" name="f01" />
<input type="checkbox" name="f01" />
<input type="checkbox" name="f01" />

【讨论】:

  • 两个答案都是正确的。我忘记使用第一个答案进行解析,这就是为什么它不起作用。谢谢大家,我真的很感激。
  • 我看到您未选择我的答案并选择了另一个。如果您做了其他答案中的操作,那么您的表现不佳。
【解决方案2】:

如果不查看 HTML,我无法确定它是否适合您,但试试这个:

$.each(arrBoxes,
      function(index,val){
      if(val) {
          $("input[name='f01']").get(index).attr("checked","checked");
      }
                           });

只需要选中arrBoxes中当前项的同索引的复选框,只有当前值不为false时才勾选。

【讨论】:

  • 好收获。不过,这与 OP 的问题无关,所以我不确定是否应该做出改变。也可以避免使用.checked = true 进行两次 jQuery 调用。
  • 你确定你所有的复选框都命名为f01吗?这对我来说似乎很好用 (JSFiddle here)。
  • tr>
  • @Leckraj 这并不能告诉我太多。假设这是您的复选框之一的标签,复选框 ID 是否与名称相同?如果是这样,请将 jQuery 选择器更改为 $("input[name^='f01']");这将匹配名称 beginf01 的所有输入。
  • 您能否编辑您的原始问题以包含完整的相关 HTML?
猜你喜欢
相关资源
最近更新 更多
热门标签