这可能是一个奇怪的问题,但我无法找到解决方案。也许我错过了什么或做错了什么。
问题是javascript函数.checked
总是返回false,带有默认选中元素。以下是从TWIG模板生成的HTML页面
<input type="checkbox" id="cb_1" name="call_1" /><label for="cb_1">add call button</label>
<input type="checkbox" id="cb_2" name="call_2" checked /><label for="cb_2">add call button</label>
<input type="checkbox" id="cb_3" name="call_3" checked /><label for="cb_3">add call button</label>
树枝模板
{% for ins in instructions %}
<input type="checkbox" id="cb_{{ ins.step }}" name="call_{{ ins.step }}" {% if ins.callButton %}checked{% endif %} /><label for="cb_{{ ins.step }}">add call button</label>
{% endfor %}
(请注意我省略了其他表格条目) 上述模板的结果是具有不同框和复选框的表单控件。结果如下
(1) [ ]
(2) [V]
(3) [V]
现在,让我们说,我想将(2)移动到(1),用户可以将(2)的优先级更高地放到(1)。移动表单内容按预期工作,但不是复选框值本身。结果应如下
(1) [V]
(2) [ ]
(3) [V]
这是我的脚本函数,它处理两个框之间的交换。
// function to switch data, _cid = current index, _oid = other index
var switchFormData = function(_cid, _oid) {
var tmp = $('cb_' + _cid).checked;
$('cb_' + _cid).checked = $('cb_' + _oid).checked;
$('cb_' + _oid).checked = tmp;
}
其他表格数据已经切换没有问题。只有复选框检查状态不会。
但具有讽刺意味的是,无论复选框状态如何,tmp
变量始终为false
。我已经使用firebug检查了$('cb_' + _cid)
选择器是否有效(它是一个getElementById简写)并且它显示了我想要访问的正确的html元素。
现在,如果在它之前使用$('cb_' + _cid).checked = true;
,则上述解决方案有效。双击该复选框并未更改结果,仍为false
。
有谁知道为什么会这样,我怎么能解决这个问题? (祝大家新年快乐)
编辑1
我混淆一些人的借口,但上面的脚本是纯粹的js脚本。这是一个非常小的脚本(替换表单数据而不更改元素id),所以我决定在没有jQuery的情况下工作。 $('cb_' + _cid)
方法是对其他函数的调用,如下所示。它返回一个HTML元素。
// DGEBI shorthand
var $ = function(id) {
return document.getElementById(id);
};
似乎我的浏览器导致此问题。 (见本文评论)。我要调查一下......
感谢您的帮助!