当JS触发表单更改时,使用jquery检测表单更改

时间:2011-07-13 19:09:58

标签: javascript jquery forms javascript-events radio-button

我有一个单选按钮列表,我可以使用javascript切换“是”或“否”。

    $(document).ready(function(){
    $('#select-all').click(function(){
        $('#notifications .notif-radio').each(function(){
            $('input[type="radio"]', this).eq(0).attr('checked', true);
            $('input[type="radio"]', this).eq(1).attr('checked', false);
        });
    });
    $('#deselect-all').click(function(){
        $('#notifications .notif-radio').each(function(){
            $('input[type="radio"]', this).eq(0).attr('checked', false);
            $('input[type="radio"]', this).eq(1).attr('checked', true);
        });
    });
});

这很好用。现在我有一段独立的代码可以检测用户何时更改了某些内容。并问他们是否想离开页面。

            var stay_on_page;

        window.onbeforeunload = confirm_exit;

        $('.container form input[TYPE="SUBMIT"]').click(function(){
            stay_on_page = false;
        });

        $('#wrapper #content .container.edit-user form').change(function(){
            stay_on_page = true;
        });

        function confirm_exit()
        {
            if(stay_on_page){ return "Are you sure you want to navigate away without saving changes?"; }
        }

问题在于,如果用户使用第一个功能来以这种或那种方式切换所有单选按钮。 JS检测表单更改没有看到表单已更改。我曾尝试使用.live,但无济于事。有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我通过添加change()(或任何适当的,在我的情况下单击()来做类似的事情)事件处理程序设置可见或隐藏字段值,然后检查该值作为onbeforeunload函数的一部分

所以,我在卸载之前看起来像:

window.onbeforeunload = function () {
      if ($('#dirtymark').length) {
           return "You have unsaved changes.";
      }
};

当然,当页面变脏时,脏标记被添加到页面(保存按钮附近的红色星号)。