javascript checkbox.checked总是返回false

时间:2013-12-31 16:07:54

标签: javascript html checkbox

这可能是一个奇怪的问题,但我无法找到解决方案。也许我错过了什么或做错了什么。

问题是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);
};
  • HTML5
  • 浏览器; firefox 25.0.1

似乎我的浏览器导致此问题。 (见本文评论)。我要调查一下......

感谢您的帮助!

0 个答案:

没有答案