Сделайте ajax, если пользователь вводит внутри ввода с задержкой [дубликат]

Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:

SqlConnection connection = null;
connection.Open();

Это вызовет ошибку, потому что, пока я объявил переменную «connection», она не указала ни на что. Когда я пытаюсь вызвать член «Open», для его устранения нет ссылки, и он будет вызывать ошибку.

Чтобы избежать этой ошибки:

  1. Всегда инициализируйте свои объекты, прежде чем пытаться что-либо с ними делать.
  2. Если вы не уверены, что объект имеет значение null, проверьте его с помощью object == null.

Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.

16
задан Hailwood 6 December 2010 в 10:07
поделиться

2 ответа

Следующая функция из Remy Sharp выполнит трюк:

function throttle(f, delay){
    var timer = null;
    return function(){
        var context = this, args = arguments;
        clearTimeout(timer);
        timer = window.setTimeout(function(){
            f.apply(context, args);
        },
        delay || 500);
    };
}

В предыдущем коде f - функция, которую вы хотели бы активировать, и delay - количество миллисекунд, ожидающих после последнего вызова (по умолчанию - 500, если не указано). throttle возвращает функцию-оболочку, которая удаляет все существующие таймауты из предыдущих вызовов, а затем устанавливает тайм-аут для delay миллисекунд в будущем для вызова f. Ссылка на arguments возвращаемой функции используется для вызова f с, гарантируя, что f получает ожидаемые аргументы.

Вы должны использовать его следующим образом:

$('#search').keyup(throttle(function(){
    // do the search if criteria is met
}));
38
ответ дан brad 26 August 2018 в 10:17
поделиться

Почти то же самое, за исключением того, что таймер устанавливается только при выполнении условий:

<input id="search" type="text" />
<script>
    var timer, value;
    $('#search').bind('keyup', function() {
        clearTimeout(timer);
        var str = $(this).val();
        if (str.length > 2 && value != str) {
            timer = setTimeout(function() {
                value = str;
                console.log('Perform search for: ', value);
            }, 2000);
        }
    });
</script>
9
ответ дан Heikki 26 August 2018 в 10:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: