1

我在页面顶部有一个单选按钮来显示“没有选择的供应商”,然后是查询循环中的其他几个单选按钮。

<label>
  <input type="radio" id="nosupp" name="supp" onchange="resetSupp(this);">
  No Supplier Chosen
</label>

<cfloop query="supplier"
  <label>
    <input type="radio" id="chk1" name="supp" value="#supplier.id#" onchange="change(this);" <cfif getChosen.RecordCount>checked="Yes"</cfif>>
    Chosen Supplier
  </label>
</cfloop>

所以我提交了包含这些按钮的表单,并且选中的按钮存储在数据库中。

然后,我使用 getChosen.RecordCount 查询数据库以检查单选按钮的值是否为“true”。

我遇到的问题是 getChosen.RecordCount 选择了正确的单选按钮,但没有我正在使用的红色突出显示。

这是我突出显示按钮的方式:

<script type="text/javascript">
  function change(obj) {
  var tr=obj.parentNode.parentNode;
  var tbl = tr.parentNode.parentNode;
  var inputs = tbl.getElementsByTagName("input");
  for(var i = 0;i<inputs.length;i++)
  inputs[i].parentNode.parentNode.style.backgroundColor='transparent';
  tr.style.backgroundColor=(obj.checked)? 'red' : 'transparent';
}

function resetSupp(obj) {
  var tr=obj.parentNode.parentNode;
  var tbl = tr.parentNode.parentNode;
  var inputs = tbl.getElementsByTagName("input");
  for(var i = 0;i<inputs.length;i++)
  inputs[i].parentNode.parentNode.style.backgroundColor='transparent';
  tr.style.backgroundColor= 'transparent';
}
</script>

如何获取数据库中设置为“true”的按钮以在页面加载时突出显示?

4

1 回答 1

2

您已经编写了函数,但听起来好像您在页面加载后从未调用它来初始化所有内容。

要遵循最佳实践,您希望在完成change(obj)时调用body.onload这个问题的答案涵盖了一些不同的方法。

最简单/最可靠的 (imo) 是使用 jQuery,但您似乎没有使用它。下一个最好的(同样,imo)是使用document.onload=function声明。

除非您只需要初始化一个输入,否则您可能需要编写另一个函数,该函数实际上循环遍历每个输入和调用change(obj)。然后,您将在触发init()时调用您的新函数。body.onload

所以,你会有

document.onload=init

function init(){
    // loop through all your inputs
    // call change(obj) on each one
}

编辑我刚刚重新阅读了你的 changeObj 并注意到你正在传递一个元素并使用 parentNode 备份 DOM 树,所以你已经在循环每个输入,所以我的伪代码init会有点偏离它的立场。不过,我可能会使用 getElementsByName 并传入输入组的名称,因此您不会在每次change(obj)调用时都重置每个输入。

于 2013-03-06T14:18:14.730 回答