点击事件不会触发

时间:2012-01-19 18:09:44

标签: jquery

我不确定为什么这段代码不起作用。这可能是因为复选框位于coldfusion div页面上。单击复选框后,我想更新个人记录。

单击该按钮时,ReInitialize功能起作用。斑马条纹表的代码适用于初始表单加载,但不会在后续加载时发布到自身。复选框点击功能永远不会被击中。我可以在Firebug中设置一个断点,它永远不会停止。

<script type="text/javascript">
$(document).ready(function () {
    $('#ReInitialize').click(function () {
        var ReInitAnswer = confirm('Are you sure you want to start over from scratch?');
        if (ReInitAnswer) {
            $.ajax({
                type: "POST",
                url: "cfc/basic.cfc?method=TruncateTemp",
                error: function (xhr, textStatus, errorThrown) {
                    // show error
                    alert(errorThrown);
                } /*
                ,
                success: function (msg) {
                    alert("Data Saved: " + msg);
                } */
            });
            $('#ReInitialize').attr('checked', true);
        } else {
            alert('canceled');
        }
    });

    var table = $('#articles'),
        rows = table.find('tr'),
        cells, background, code;

    for (var i = 0; i < rows.length; i += 1) {
        cells = $(rows[i]).children('td');
        code = $(cells[0]).value();
        if (code % 2 == 0) {
            background = '#e29e6e';
        } else {
            background = '#f9cf80';
        }
        $(rows[i]).css('background-color', background);
    }

    $('.notdupe').bind('change', function () {  // <----------------------
        // If checked
        if ($(this).is(":checked")) {
            $.ajax({
                type: "POST",
                url: "cfc/basic.cfc?method=SetNotDupe",
                data: "indivNum=" + $(this).value() + "&SetValue=" + $(this).checked(),
                error: function (xhr, textStatus, errorThrown) {
                    // show error
                    alert(errorThrown);
                }
            });
        }
    });
});
</script>

<cfif qPages.not_dupe_flag>
    <input class="notdupe" type="checkbox" name="indivID" value="#userid#" checked />
<cfelse>
    <input class="notdupe" type="checkbox" name="indivID" value="#userid#" />
</cfif>

我将其从点击事件更改为更改事件。

2 个答案:

答案 0 :(得分:1)

它看起来应该正确绑定。但我认为$('.notdupe').bind()函数中的AJAX调用范围存在问题。

$.ajax.data代码中,我认为$(this)不再引用$('.notdupe'),而是引用AJAX事件。另外,我不确定.checked()应该做什么。

$('.notdupe').bind('change', function (e){
    // If checked
    if ($(this).is(":checked")) {
        $.ajax({
            type: "POST",
            url: "cfc/basic.cfc?method=SetNotDupe",
            data: "indivNum=" + $(e.target).value() + "&SetValue=" + $(e.target).is(":checked")),
            error: function (xhr, textStatus, errorThrown){
                // show error
                alert(errorThrown);
            }
        });
    }
});

答案 1 :(得分:0)

您是否尝试过使用.on()代替.click()

替换:

$('#ReInitialize').click(function() {

使用:

$('#ReInitialize').parent().on('click', '#ReInitialize', function() {

我不清楚你的所有代码是做什么的,但如果#ReInitialize在某些时候被替换,你将失去你的点击处理程序。 .on()的此实施将适用于#ReInitialize以及任何未来的实例化。

P.S。如果你使用的是旧版本的jQuery,它将是.live('click', function() {