Jquery .remove不起作用(对我来说......)

时间:2012-10-17 19:43:55

标签: jquery checkbox

我正在尝试让复选框在检查时附加div,并在取消选中时删除相同的div。我相信问题是什么时候调用.remove()..我只是不知道问题是什么。 非常感谢你的帮助!

    $(document).ready(function(){
         $('.checked_locations').click(function(){
            if ($(this).is(':checked'))
            {
                var value = $(this).val();
                $('#locations_filter').append("<div id='hidden_"+value+"'><input type='hidden' name='loc_filter[]' value='"+value+"' /></div>");
            }
            else
            {
                //alert('not checked');
                $('#locations_filter #hidden_'+value).remove(); 
            }
        });

    });

5 个答案:

答案 0 :(得分:4)

你的else语句中未定义

value。将它的声明移到if语句之外。

$(document).ready(function() {
    $('.checked_locations').click(function() {
        var value = $(this).val();
        if ($(this).is(':checked')) {
            $('#locations_filter').append("<div id='hidden_" + value + "'><input type='hidden' name='loc_filter[]' value='" + value + "' /></div>");
        }
        else {
            //alert('not checked');
            $('#hidden_' + value).remove();
        }
    });
});​

答案 1 :(得分:4)

您尝试将值变量从不同的块引用到您首次定义它的位置:它超出范围。您需要将var value = $(this).val();移到if语句之外。

答案 2 :(得分:0)

只需使用此代码:

$('#hidden_'+value).remove(); 

元素ID必须是唯一的,因此您将引用一个唯一的项目。

答案 3 :(得分:0)

else
{
    var value = $(this).val();
    $('#locations_filter #hidden_'+value).remove(); 
}

答案 4 :(得分:0)

一种更优雅的方式来做你想做的事情:

$(document).ready(function(){
     var element;
     $('.checked_locations').click(function(){
        if ($(this).is(':checked'))
        {
            var value = $(this).val();
            element= $('#locations_filter').append("<div id='hidden_"+value+"'><input type='hidden' name='loc_filter[]' value='"+value+"' /></div>");
        }
        else
        {
            //alert('not checked');
            element.remove(); 
        }
    });

});

这是一个closure,它是动态语言中非常强大的技术。如果你打算在javascript中进行认真的开发,那么学习它会很好。