代码之家  ›  专栏  ›  技术社区  ›  Carson Myers

使用unbind,我收到一个Javascript TypeError:Object函数没有方法'split'

  •  2
  • Carson Myers  · 技术社区  · 14 年前

    我为一个朋友写了这段代码。他的想法是,他可以在文本框中添加一个“default”类,这样默认值将变灰,然后当他单击它时,它将消失,文本将恢复到正常颜色,然后再单击一次不会清除它:

    $(document).ready(function() {
    
        var textbox_click_handler = function clear_textbox() {
            $(this).removeClass('default');
            $(this).attr('value', '');
            $(this).unbind(textbox_click_handler);
        };
    
        $(".default").mouseup(textbox_click_handler);
    
    });
    

    单击以清除可以工作,但出现以下错误:

    Uncaught TypeError: Object function clear_textbox() { ... } has no method 'split'
    

    是什么原因造成的?我该怎么修?我只想在mouseup事件中添加一个匿名函数,但我不确定如何解除绑定--我可以解除所有绑定,但我不知道他是否想向其中添加更多功能(可能不想,但嘿,他可能希望在单击某些文本框时出现一条弹出消息,或者其他什么)。

    unbind 函数,因为清除工作,但第二次单击仍会清除它。

    5 回复  |  直到 14 年前
        1
  •  2
  •   David Hellsing    14 年前

    var textbox_click_handler = function(e) {
        $(this).removeClass('default')
            .attr('value', '')
            .unbind(e.type, arguments.callee);
    };
    $(function() {
        $(".default").mouseup(textbox_click_handler);
    });
    

    或者使用 .one

    $(function() {
        $(".default").one('mouseup', function() {
            $(this).removeClass('default').attr('value', '');
        });
    });
    
        2
  •  1
  •   Sarfraz    14 年前

    这个 unbind

        3
  •  1
  •   sTodorov    14 年前

    var c = function clear_textbox() {
        $(this).removeClass('default');
        $(this).attr('value', '');
        $(this).unbind('mouseup');
    }
    

    然后:

    $(".default").mouseup(function(){
       c();
    });
    
        4
  •  1
  •   Jhong    14 年前

    如果不想完全解除mouseup绑定,请使用hasClass()检查当前状态。不需要解开任何东西。

    $(document).ready(function() {
    
        $('.default').bind('mouseup', function(e) {
            var tb = $(this);
            if(tb.hasClass('default')) {
                tb.removeClass('default').val('');
            }
        });
    
    });
    
        5
  •  1
  •   Darin Dimitrov    14 年前

    确保你是 unbinding mouseup :

    function clear_textbox() {
        $(this).removeClass('default');
        $(this).attr('value', '');
        $(this).unbind('mouseup');
    }
    
    $(function() {
        $('.default').mouseup(clear_textbox);
    });
    

    plugin form

    (function($) {
        $.fn.watermark = function(settings) {
            this.each(function() {
                $(this).css('color', 'gray');
                $(this).mouseup(function() {
                    var $this = $(this);
                    $this.attr('value', '');
                    $this.unbind('mouseup');
                });
            });
            return this;
       };
    })(jQuery);
    

    这样你的朋友就可以:

    $(function() {
        $('.someClassYourFriendUses').watermark();
    });