0

我有以下代码:

$('#calendarAppointmentStartTime').change(function() {
    $('#conflicts').empty();
    $('input[type=checkbox]').each(function() {
        var sThisVal = (this.checked ? "1" : "0");
        if (sThisVal == "1") {
            $(this).removeAttr("disabled");
            $('#resourceConflicts' + $(this).val()).empty();
        }
    });

    calculateScheduleEndTime();
    $('input[type=checkbox]').each(function() {
        var sThisVal = (this.checked ? "1" : "0");
        if (sThisVal == "1") {
            conflictChecker($(this).val());
        }
    });
});​

问题如下: calendarAppointmentStartTime 第一次更改时,代码被触发。第二个更改也会触发,但任何后续更改事件似乎都不会触发。我无法弄清楚发生了什么。在我添加第二个 $('#conflicts').html() 和第一个输入复选框迭代之前,它确实有效。

谁能看到我可能遗漏的任何东西?我真的可以用一双新鲜的眼睛。

编辑:复选框的相关HTML(有很多所以我只包括1:

<input id="Resource10" type="checkbox" onclick="conflictChecker(10)" value="10"name="resources">    
John Doe
<br/>
Conflicts:
<span id="resourceConflicts10">0</span>

在另一个地方:

<td>
<div id="conflicts"></div>
</td>

和 calendarstarttime 输入框:

conflictChecker 方法将内容添加到冲突 div,并根据在相关开始时间找到的冲突数量禁用复选框。

4

1 回答 1

0

多谢你们!

我确实解决了。这归结为我在用例中缺少的一些逻辑。

用户可以单击复选框以选择资源,然后更改运行冲突检查器方法的时间。冲突检查器方法将禁用复选框并根据 ajax 返回“取消选中”它。将根据冲突在冲突 div 和 resourceConflicts10(基于 resourceID 的 10 个更改)中设置值。第二次 starttime 再次更改,代码必须运行另一个冲突检查并启用所有复选框并清除 div 中的通知。

我错过了冲突导致复选框“未选中”的事实,因此以下代码:

var sThisVal = (this.checked ? "1" : "0");
    if (sThisVal == "1") {
        $(this).removeAttr("disabled");
        $('#resourceConflicts' + $(this).val()).empty();
    }

需要更改为以下内容:

        $(this).removeAttr("disabled");
        $('#resourceConflicts' + $(this).val()).empty();

还有一些其他更改,但这是使更改正常工作的更改。

再次感谢所有自愿提供帮助的人。现在我会因为最初没有通过每一行并在我发布问题之前更加努力地思考它而自责。我现在感觉自己像个量油尺。

于 2012-08-23T17:04:12.550 回答