JQUERY - 如果函数内部的语句不起作用

时间:2014-01-24 16:15:13

标签: javascript jquery forms

我有一个侦听复选框更改的函数。页面加载时,复选框将勾选或取消选中,具体取决于之前完成的步骤。

我想记录是否更改了复选框。如果它被更改,然后再次更改,它将被重置为它开始的值,因此意味着它的值没有变化。

我编写了以下代码来执行此操作。

//Checkboxes
    var change ="<input class=\"changed\" type=\"hidden\" name=\"changed\" value=\"1\"/>";
    var nochange ="<input class=\"changed\" type=\"hidden\" name=\"changed\" value=\"0\"/>";
    var changed=false;
    $(".change-event").change(function(){
        //alert("checked");

        if(changed==false) {
            $(this).next(".changed").remove();
            $(this).after(change);
            changed=true;
        }   

        if(changed==true) {

            $(this).next(".changed").remove();
            $(this).after(nochange);
            changed=false;

        }

    });

更改功能中的if语句不起作用。更改功能本身没有问题,因为注释掉的警报工作正常。

我已经尝试了if(!checked)以及if(checked)作为条件,但它仍然无效。

帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

你需要

    if(changed==false) {
        $(this).next(".changed").remove();
        $(this).after(change);
        changed=true;
    } else {

        $(this).next(".changed").remove();
        $(this).after(nochange);
        changed=false;

    }

否则changed的起始值为false,则第一个if条件满足...它会将changed的值更改为true。然后再次检查第二个条件它将被满足,因为changed的值已经被第一个if改变,因此第二个块也将被调用...因此它否定了所做的所有更改第一个街区。


但看起来它可以简化为

var change = "<input class=\"changed\" type=\"hidden\" name=\"changed\" value=\"1\"/>";
var nochange = "<input class=\"changed\" type=\"hidden\" name=\"changed\" value=\"0\"/>";
var changed = false;
$(".change-event").change(function () {
    $(this).next(".changed").remove();
    $(this).after(changed ? nochange : change);
    changed = !changed;
});