2015-05-11 5 views
1

Можно ли назначить функцию для очистки поля ввода, если вы удерживаете мышь на нем? В настоящее время у меня есть http://jsfiddle.net/e1kb6esm/6/, где, если вы нажмете на поле, оно увеличивается на единицу, но то, что мне также нужно сделать, - это очистить поле, если оно было щелкнуто по ошибке. Я думал что-то делать сНа mousedown в течение 5 секунд, очистить поле ввода

if $this.mousedown(function(e) { 

но если я очистил на MouseDown было бы также очистить увеличивающиеся значения по щелчку тоже?

Код:

<input class="played" type="text" value="" /><br> 
<input class="played" type="text" value="" /><br> 
<input class="played" type="text" value="" /><br> 
<input class="played" type="text" value="" /><br> 
<input class="played" type="text" value="" /> 
$('.played').on('focus', function() { 
    var $this = $(this); 

    if ($this.val() == '') { 
     $this.val('1'); 
     $this.blur(); 
    } else {   
     var value = parseInt($this.val()); 
     $this.val(value + 1);   
     $this.val(); 
     $this.blur(); 
    } 
}); 
+0

Вы уже видели это? http://stackoverflow.com/questions/4961072/jquery-continuous-mousedown –

ответ

3

Для достижения этой цели вы можете запустить таймер, когда mousedown срабатывает событие. Это событие очистит поле, когда завершится отсчет 5 секунд. Вам также нужно будет подключиться к событию mouseup, чтобы очистить таймер, если мышь выпущена раньше. Попробуйте это:

var timer; 
$('.played').on({ 
    'focus': function() { 
     $(this).val(function (i, v) { 
      return (+v || 0) + 1; 
     }).blur(); 
    }, 
    'mousedown': function() { 
     var $el = $(this); 
     timer = setTimeout(function() { 
      $el.val(''); 
     }, 5000); 
    }, 
    'mouseup': function() { 
     clearTimeout(timer); 
    } 
}); 

Example fiddle

Обратите внимание, что я также немного улучшить увеличивающуюся логику.

+0

Абсолютно блестящий, спасибо. Я буду играть с этим, чтобы выяснить, как это работает! Еще раз спасибо – BN83

+0

Рад помочь. О каких битах вы хотите знать? –

+0

Ну, я смотрю на '$ (this) .val (function (i, v) {return (+ v || 0) + 1;}). Blur();' и я получаю, что значение устанавливается или изменилось, а затем вы удаляете фокус с размытием, но я не уверен, что делает '(функция (i, v) {return (+ v || 0) + 1;})' part. Я вижу, что он проверяет нуль или v, а затем добавляет 1, но я не уверен, как это работает !? – BN83

0

Вы можете установить функцию тайм-аута для выполнения через 5 секунд, которая проверяет, нажата ли кнопка мыши.

setTimeout(checkIfClickedFive, 5000); 

function checkIfClickedFive() { 
    if(clicked){ 
     element.val(''); 
    } 
}; 

И MouseUp вы ясно этот тайм-аут функции так, что они не получают выполняются, если вы не хотите.

$('.played').off('focus', function() { 
    clicked = false; 
    clearTimeout(); 
}); 

См. Измененный Fiddle.

Перечисленная переменная является глобальной. Это в основном избыточно, но я всегда немного переоцениваю тайм-ауты и особенно метод clearTimeout.

0

Соответствует ли это тому, что вам нужно? http://jsfiddle.net/3oqa3796/

Я добавил этот код (от how to calculate time during mousedown event in jquery?):

$('.played').mousedown(function(e) { 
    console.log($(this)); 
    var element = $(this); 
    clearTimeout(this.downTimer); 
    this.downTimer = setTimeout(function() { 
     element[0].value=""; 
     console.log(element); 
    }, 5000); 
}).mouseup(function(e) { 
    clearTimeout(this.downTimer); 
}); 
Смежные вопросы