如何使用jquery在更改函数中嵌套单击函数?

时间:2013-02-15 18:11:33

标签: javascript jquery nested

我有一个带有两个选项的选择下拉列表:是/否(实际上是三个:还有“选择一个没有值的选项”)。 然后有一些处理一些变量的chekbox(当检查时,变量被添加到一个全局变量(称为tot),当它们被删除时,它们被减去)。我希望复选框有两种不同的行为,具体取决于下拉选项是“是”还是“否”。所以我写了这个,但我认为我误解/误解了一些东西,因为它不起作用(当它没有嵌套在变更选择函数中时它起作用)。

<select name="container" id="container">
<option id="none" value="" >Select an option</option>
<option id="no" value="no" >no</option>
<option id="yes" value="yes" >yes</option>
</select>

这是javascript(带有jquery库)

var tot = 0;
$(document).ready(function () {

    $("#container").change(function () {
        var sel = $(this).find(":selected").attr("id")
        if (sel == "no" || sel == "none") {

            $("#in-category-1").click(function () {
                if ($('#in-category-1').is(':checked')) {
                    if (tot < 60) {
                        tot = tot + 2.5;
                    } else if (tot >= 60) {
                        alert('Stop!');
                        $('#in-category-1').attr('checked', false);
                    }
                } else if (tot > 0) {
                    tot = tot - 2.5;
                }
                functionblablabla();
                });
                if (sel == "yes") {

                    $("#in-category-1").click(function () {
                        if ($('#in-category-1').is(':checked')) {
                            if (tot < 50) {
                                tot = tot + 2.5;
                            } else if (tot >= 50) {
                                alert('Stop!');
                                $('#in-category-1').attr('checked', false);
                            }
                        } else if (tot > 0) {
                            tot = tot - 2.5;
                        }
                        functionblablabla2();
                    });
                });
            });

即使在页面加载时默认选择了选项(选项存储在数据库中),也会发生某些事情,因此如果选择no,则应该发生同样的事情

    if (($('#no').prop('defaultSelected')) ||  ($('#none').prop('defaultSelected')) ) {
                                $("#in-category-1").click(function () {
                               //same stuff than change select no or select none
                               });
    }

    if ($('#yes').prop('defaultSelected')) {
                                $("#in-category-1").click(function () {
                               //same stuff than change select yes
                               });
    }

我做错了什么?

1 个答案:

答案 0 :(得分:0)

你可以做得更好一点:

  • 括号
    • 看起来'if yes'应该是大if块的一部分
    • 遗漏了一些收尾的
  • 不创建全局VAR
    • 将'tod'var放入dom ready函数
  • 分离之前的点击事件(否则,如果选项被多次更改,事件将会消失)

    $("#in-category-1").off("click");

  • 使用快捷键

    获取所选值

    $(this).val();

小提琴:http://jsfiddle.net/kmybV/