【问题标题】:Changing a checkbox's state programmatically in dashcode在 dashcode 中以编程方式更改复选框的状态
【发布时间】:2010-03-21 21:33:55
【问题描述】:

好的,所以我正在尝试在 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.com/setattribute-removeattribute-checkbox

标签: javascript checkbox dashcode


【解决方案1】:

Dashboard Widget 仅在 WebKit 技术上运行,因此适用于 Safari 的代码在 Dashcode 中也应该有效。以下任何一项都应该有效:

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

它们不工作的事实表明您的代码中的其他地方存在问题。我会检查线路

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

正确地将元素分配给checkbox 变量。此外,检查您的“复选框”元素的 id 是否有效且正确(不重复,没有拼写错误等)。

【讨论】:

  • 是的,我认为可能是这样,但我已经检查了四次,ID 是“checkbox”,代码是 checkbox = document.getElementById("checkbox");我在运行时没有任何错误。我在堆栈布局中运行它,这会改变什么吗?
  • 这是答案,尤其是第一个版本(无需去任何地方属性)。如果设置 checked 属性不起作用,则故障出在其他地方。
  • 我刚刚运行了一个测试,它设置了选中的属性,但是它没有更新复选框。另外,通过更多的测试,最初它说检查的变量是未定义的。
  • 对于一些对此异常行为感到困惑的人,checkbox.checked = true; 通常更可靠。
【解决方案2】:

当我写这个答案时,这个问题已经一个月了。它可能已经解决了,但无论如何我想补充一点,如果您使用的是 Dashcode,Checkbox 部分是一个包含一个标签和一个输入的 div,这个是“真正的”复选框。

如果您检查在 Safari 中加载的 html,您会注意到“复选框”是元素的类型。

因此,更改复选框状态的正确方法是,假设“输入”是它的 id(虽然它可以附加一个默认数字):

document.getElementById("input").checked="true";

或您想使用的任何方法。

这里的重点是你试图改变另一个 div 的状态。

希望对你有帮助!

【讨论】:

  • 这是正确的。 OP 可能正在尝试将父 DIV 元素的状态更改为“已检查”。
【解决方案3】:
checkbox.setAttribute("checked", "checked"); // set
checkBox.removeAttribute("checked"); // remove

【讨论】:

  • 感谢您指出 checkBox.removeAttribute("checked");。我试过 checkbox.setAttribute("checked", false);当然,这没有用。
【解决方案4】:

这个问题已经有一段时间了。无论如何,以下内容对我们有用:

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

正如在上一个答案中所指出的,Dashcode 创建这些控件的方式需要通过 div 包装器,该包装器具有实际 ID(本示例中为复选框)并设置输入的属性,即子节点 1 .

寻找输入的实际“id”会出现问题,因为您无法控制分配给节点的 id。例如,如果您有两个复选框,则第一个复选框将“输入”作为子节点 1 的 id,第二个将“输入”作为子节点 1 的 ID,除非您在源中的某处使用“输入”或“输入 1”作为 ID你已经设计好了!

可能还有其他方法,但我还没有找到。

【讨论】:

    【解决方案5】:

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

    checkbox.checked = false;
    

    同时:

    checkbox = document.getElementById('blablabla');
    

    或者这样写

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

    【讨论】:

      【解决方案6】:

      也许:

      checkbox.checked = "checked";
      

      然后:

      checkbox.checked = "unchecked";
      

      【讨论】:

      • 好的。我没有使用 Dashcode 的经验,但它看起来像 HTML。 :) 希望有经验的人能在这里为您提供帮助。
      【解决方案7】:
      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。

      【讨论】:

        【解决方案8】:
        var checkbox = document.getElementById("checkbox"); 
        

        这行有问题,应该是

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

        【讨论】:

        • 不,不应该。这是普通的 javascript。
        猜你喜欢
        • 2020-04-20
        • 2014-09-25
        • 2016-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多