代码之家  ›  专栏  ›  技术社区  ›  Gutzofter

用jQuery重写JavaScript中的复选框

  •  1
  • Gutzofter  · 技术社区  · 16 年前

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <script type="text/javascript" src="../js/jquery-1.4.2.min.js"></script>
        <script type="text/javascript">
            $(function() {
                $('<div><input type="checkbox" name="makeHidden" id="makeHidden" checked="checked" />Make Hidden</div>').appendTo('body');
                $('<div id="displayer" style="display:none;">Was Hidden</div>').appendTo('body');
    
                $('#makeHidden').click(function() {
                    var isChecked = $(this).is(':checked');
    
                    if (isChecked) {
                        $('#displayer').hide();
                    }
                    else {
                        $('#displayer').show();
                    }
                    return false;
                });
    
            });
    
        </script>
    </head>
    <body>
    </body>
    </html>
    

    这不管用是因为 return false; 返回false;

    [编辑] 使用@patrick的答案,我的结果是:

    火狐:

    • 手动测试生产应用程序-良好。

    Internet Explorer:

    • 玩具手动测试-失败。
    • 单元测试-很好。
    • 生产应用程序的手动测试-失败。

    Internet Explorer最初需要单击一次。之后,它需要两次点击。

    我是否必须覆盖解决方案的整个复选框行为?

    在我的单元测试中,这是我对用户进行复选框模拟的方式:

    $(':input[name=shipToNotActive]').removeAttr('checked');
    $('#shipToNotActive').change();
    

    $(':input[name=shipToNotActive]').attr('checked', 'checked');
    $('#shipToNotActive').change();
    
    3 回复  |  直到 16 年前
        1
  •  4
  •   user113716    16 年前

    用这个怎么样 change 而不是 click ?

    $('#makeHidden').change(function() {
                var isChecked = $(this).is(':checked');
    
                if (isChecked) {
                    $('#displayer').hide();
                }
                else {
                    $('#displayer').show();
                }
                return false;
            });
    

    return false; 不会妨碍,因为事件是由于发生更改而触发的。

        2
  •  2
  •   Gutzofter    16 年前

    Here is a work around.

    现在我的代码是这样的:

            if ($.browser.msie) {
                $('#makeHidden').change(function () {
                    this.blur();
                    this.focus();
                    onCheckboxClicked();
                });
            }
            else {
                $('#makeHidden').change(function() {
                    return onCheckboxClicked();
                });
            }
    

    有人有比这更好的东西吗?

        3
  •  0
  •   Amy B    16 年前

    试试这个:

    $(function() {
        $('<div><input type="checkbox" name="makeHidden" id="makeHidden" checked="checked" />Make Hidden</div>').appendTo('body');
        $('<div id="displayer" style="display:none;">Was Hidden</div>').appendTo('body');
    
        $('#makeHidden').click(function() { return onCheckboxClicked(this) } );
    });
    
    function onCheckboxClicked(el) {
        var isChecked = $(el).is(':checked');
    
        if (isChecked) {
            $('#displayer').hide();
        }
        else {
            $('#displayer').show();
        }
        return false;
    }