Типичная ошибка при работе с jQuery

$('...').on('click', function (evt){
      return false; // это действие равносильно

      // этим двум:
      // (1) отменяет дефалтное поведение
      evt.preventDefault();

      // (2) останавливает всплытие события по дереву,
      // старайтесь избегать этого, т.к. могут быть слушатели,
      // которые расположены "выше"
      evt.stopPropagation();
});​


Как создать 101 метод и не ослепнуть

// Допустим нам нужно N-ое количество однотипных методов, например:​​​

var Status = function (status){
    this.status = status;
};

Status.prototype = {
    isSuccess: function (){
        return this.status == 'success';
    },
    
    isError: function (){
        return this.status == 'error';
    },
    
    isParseError: function (){
        return this.status == 'parseerror';
    }
    
    // и так далее
};​



// Утомительно, да! Но есть спасение:​​
'success error parse-error abort timeout'.split(' ').forEach(function (status){
    // [[array]].forEach — работает только в современных браузерах
    
    // получим имя метода в camel case
    var name = ('is-'+status).replace(/-([a-z])/ig, function(all, letter){ return letter.toUpperCase(); });
    
    // вырезаем все "-"
    status = status.replace(/-/g, '');
    
    // создаем метод
    Status.prototype[name] = function (){
        return this.status == status;
    };
});


​// если есть jQuery, то просто красота    
$.each('success error parse-error abort timeout'.split(' '), function (i, status){
    var name = $.camelCase('is-'+status);

    status = status.replace(/-/g, '');

    Status.prototype[name] = function (){
        return this.status == status;
    };
});


(new Status('success')).isSuccess(); // true;
(new Status('error')).isParseError(); // false;


// или такой вариант использования
var statusMap = {
      'success': 200
    , 'error': function (code){ return code != 200 }
    , 'not-found': 404
    , '500': 500
    // etc
};

Object.keys(statusMap).forEach(function (status){
    // Object.keys — работает только в современных браузерах

    var name = $.camelCase('is-'+status);

    status = statusMap[status];

    Status.prototype[name] = function (){
        return $.isFunction(status)
            ? status.call(this, this.status)
            : this.status == status
        ;
    };
});​
                              
(new Status(404)).isNotFound(); // true
(new Status(500)).is500(); // true
​