【问题标题】:Checkbox state do not change after button is pressed按下按钮后复选框状态不会改变
【发布时间】:2013-06-29 02:06:20
【问题描述】:

我有一个按钮,当它被按下时,它会调用一个带有一些参数的 ajax 函数,然后 ajax 会在数据库上发布一些值。用户在离开应用程序或刷新页面之前可能会多次使用此表单。到目前为止,这很好用!

在上次更新中,我添加了一个复选框,该复选框将使用上述 ajax 函数保存我希望保存在数据库中的另一条信息。因此,当按下按钮时,我会检查复选框是否被选中,然后将 true 或 false 发送给 ajax 函数。到目前为止,这也很有效!

不过,不能很好地工作的是,最后一个功能仅在第一次时才能正常工作!每隔一次用户点击按钮,无论复选框选中状态是什么,它都会提交第一次的状态。就像第一次按下按钮后 checkbox.checked 属性冻结一样。

这可能无关紧要,但我也尝试过使用切换按钮,但我遇到了同样的问题!

你知道如何克服这个问题吗?

非常感谢!

代码如下: 表单:它有1个切换按钮和3个调用sendTask函数的按钮。

<button type='button' class='btn btn-info' data-toggle='button' style='margin-top: 5px; width: 216px; height: 40px;' name='yesterday".$category['id']."' id='yesterday".$category['id']."'>This one was yesterday!</button></div>
            <button class='btn btn-".$buttoncolor."' id='btn-spec-small' type='button' onClick='sendTask(".$category['id'].", &#39;1&#39;, yesterday".$category['id'].")'>0-15min</button>
            <button class='btn btn-".$buttoncolor."' id='btn-spec-small' type='button' onClick='sendTask(".$category['id'].", &#39;2&#39;, yesterday".$category['id'].")'>15-60min</button>
            <button class='btn btn-".$buttoncolor."' id='btn-spec-small' type='button' onClick='sendTask(".$category['id'].", &#39;3&#39;, yesterday".$category['id'].")'>60+min</button>

sendTask 函数:

function sendTask(category, weight, checkbox){
    var ieri = $(checkbox).hasClass('active');
    TaskSubmit(category, weight, ieri);
};

TaskSubmit 函数:

function TaskSubmit (taskidsubmitted, weight, ieri) {
$.ajax({
    url: 'submit_task.php?taskid=' + taskidsubmitted + '&weight=' + weight + '&ieri=' + ieri,
    success: function (response) {
        if (response !== "fail") {
            document.getElementById('score-label').innerHTML = response;
        } else {
            document.location = "index.php";
        }
    }
});

}

问题在于这一行:

var ieri = $(checkbox).hasClass('active');

仅更改第一次按下按钮的时间。所有其他时间都保持第一个状态(真或假)。

【问题讨论】:

  • 请发布您的代码。
  • 事实上,这可能是一打不同的东西。请发布相关代码 - 即。 ajax,按钮所在的 html,任何更多信息,如按钮动态,是否在任何时候重新加载等等......这可能看起来很愚蠢,但这些都是可能影响什么的领域 not 工作
  • 请记住,您也可以在jsFiddle 中同时使用 jQuery 和 Ajax 来创建示例。查看使用Ajax here的示例!
  • 我刚刚注意到,但是您的第一个按钮是复选框?!?!?!否则,您已经定义了两个具有相同 id 的对象,这将导致意外和损坏的行为。 ID 应该始终是唯一的。
  • 复选框是动态创建的,它们的 id 类似于“yesterday1”、“yesterday2”、...、“yesterday12”。在这里,我发布了带有切换按钮的版本 - 不是复选框,但问题和功能是相同的。

标签: php javascript ajax checkbox


【解决方案1】:

我相信你应该使用.prop()

function sendTask(category, weight, checkbox){
    var ieri = ($(checkbox).prop('checked') != undefined);
    TaskSubmit(category, weight, ieri);
};

如果未选中复选框,浏览器应该删除此属性。如果不是这种情况,请使用console.log() 了解它在做什么。


在您的 html 中,您将 yesterdaySomeCategory 传递给函数,而不是 "yesterdaySomeCategory"。我不确定 jQuery 对此做了什么,但选择元素的正常方式是通过 $("#yesterdaySomeCategory")。尝试将其更改为

<button class='btn btn-".$buttoncolor."' id='btn-spec-small' type='button' onClick='sendTask(".$category['id'].", &#39;1&#39;, \"#yesterday".$category['id']."\")'>0-15min</button>

【讨论】:

  • 我仍然遇到同样的问题。您的代码有效,但只是第一次。下一个使用复选框的第一个状态(它是真或假)。
  • 您没有包含应该更改复选框状态的代码部分。要“选中”复选框,请添加“选中”属性。要“取消选中”复选框,请删除“选中”属性。
  • 嗯...复选框的状态仅由用户更改,而不是通过代码更改。最初它是未选中的,但随后用户可能会选中它或不选中它,然后点击 3 个按钮之一。无论他第一次做什么(选中或不选中复选框),每次按下按钮时,复选框状态都保持不变。
  • 您也可以添加复选框的 html 吗?你在什么浏览器上测试?
  • 复选框有: 其中有 12 个("yesterday1", ..., "yesterday12")。我正在使用最新的 Firefox 进行测试。
猜你喜欢
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2013-08-30
相关资源
最近更新 更多