在Dashcode中编程更改复选框的状态

11

好的,我试图在Dashcode中以编程方式更改复选框的状态。 我尝试过:

var checkbox = document.getElementById("checkbox");

// I have tried all the following methods.
checkbox.checked = false;
checkbox.selected = false;
checkbox.value = false;

你可以使用checkbox.checked = false来取消勾选,但不要使用setAttribute('checked','checked')。虽然它看起来有效,但如果你手动点击了复选框并尝试使用setAttribute('checked','checked')或removeAttribute('checked')来勾选或取消勾选,它将失败。 - jforjs
请参考我最近的帖子,链接为http://jforjs.com/setattribute-removeattribute-checkbox/。 - jforjs
8个回答

23

控制面板小部件只是在基于WebKit技术的环境下运行,因此适用于Safari的代码在Dashcode中也应该有效。以下任意一种方法都可以:

checkbox.checked = true;
checkbox.setAttribute("checked", "true");

它们不起作用的事实表明您的代码中其他地方存在问题。我建议检查该行:

The fact that they are not working indicates there is a problem elsewhere in your code. I would check the line

var checkbox = document.getElementById("checkbox");     

正确地将一个元素分配给checkbox变量。同时,请检查你的"checkbox"元素的id是否有效和正确(不是重复的,没有错别字等)。


是的,我也想过可能是那样,但我已经检查了四次了,ID是“ checkbox”,代码是 checkbox = document.getElementById(“ checkbox”); 运行时没有出现任何错误。我在stacklayout中运行它,这会改变什么吗? - Daniel
这就是答案,特别是第一个版本(不需要去任何属性)。如果设置“checked”属性没有起作用,那么故障原因在其他地方。 - Tim Down
我刚刚运行了一个测试,它设置了checked属性,但是它没有更新复选框。另外,通过一些更多的测试,最初它说checked变量未定义。 - Daniel
对于那些对以下行为感到困惑的人,“checkbox.checked = true;”通常更加可靠。 - Sankalp Sharma
setAttribute不会在视觉上改变输入(就像你点击它一样)。@Rogello的回答会。至少在Chrome中是这样的。 - Cybernetic
setAttribute不会在视觉上改变输入(就像你点击它一样)。@Rogello的回答会。至少在Chrome中是这样的。 - undefined

7
这个问题已经有一个月了,当我写这篇答案时。它可能已经被解决了,但无论如何,我想补充一下,如果您正在使用Dashcode,则复选框部分是一个包含一个标签和一个输入元素的
,后者是“真正”的复选框。
如果您在Safari中检查加载的HTML,您将注意到“checkbox”是该元素的类型。
因此,更改复选框状态的正确方法是,假设“input”是其ID(尽管它可能有一个默认数字附加):
document.getElementById("input").checked="true";

或者您想使用的任何方法。

这里的主要问题是您试图更改另一个div的状态。

希望能对您有所帮助!


这是正确的。楼主可能试图将父DIV元素的状态更改为“checked”。 - mclaughj

2
checkbox.setAttribute("checked", "checked"); // set
checkBox.removeAttribute("checked"); // remove

1
感谢您指出checkBox.removeAttribute("checked");。我尝试了checkbox.setAttribute("checked", false);,但显然没有起作用。 - codemonkey

1

我不知道你用的是哪个浏览器,但当我在FF 3.6上测试时,它可以正常工作。 就像这样放置:

checkbox.checked = false;

当:

checkbox = document.getElementById('blablabla');

或者写成这样

document.getElementById('idhere').checked = false;

1

这个问题已经存在一段时间了。不过,以下方法对我们有效:

checkbox.childNodes[1].checked = true; checkBox.childNodes[1].checked = false;

正如之前的答案所指出的那样,Dashcode创建这些控件的方式需要通过div包装器,获取实际ID(在此示例中为checkbox),并设置输入属性,即子节点1。

查找输入的实际“id”可能会有问题,因为您无法控制分配给节点的id。例如,如果您有两个复选框,则第一个复选框的子节点1将具有“input”作为id,而第二个复选框则为“input1”,除非您已经在设计中使用了“input”或“input1”作为id!

可能还有另一种方法,但我还没有找到。


0
cell = row.insertCell(-1);
sel = document.createElement('input');
sel.setAttribute("type", "checkbox")
sel.setAttribute("name", "myCheckBox")
cell.appendChild(sel);
cell.getElementsByTagName('input')[0].checked = true;

我创建了一个表格,行和单元格,并在其中创建了一个复选框。 然后我可以抓住第一个输入对象并将其选中状态设置为true。

0

也许:

checkbox.checked = "checked";

然后:

checkbox.checked = "unchecked";

好的。我没有使用过Dashcode,但它看起来像HTML。 :) 希望有更多经验的人能在这里帮助你。 - Lucas Jones

-5
var checkbox = document.getElementById("checkbox"); 

这行代码有问题,应该是

var checkbox = document.getElementById('#checkbox");

不应该。这是原生的JavaScript。 - Arjan Treur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接