2016-11-01 3 views
2

私はここで入力フィールドを持っています。入力フィールドにアスタリスクを追加すると、ホバー入力テキストが無くなるとアスタリスクが追加されます。どのようにsetInterval(たぶん)と私はそれがホバリングされたときに毎秒入力フィールドにアスタリスクを追加することができますか?ホバーイベントのSetInterval

$('body').append("<input type='text' />"); 

    $('input').hover(function() { 
    $(this).val('*' + $(this).val()); 
    }) 
$('input').mouseleave(function() { 
    $(this).val(''); 
}) 
+0

の間隔にthis(入力)を追加それをホバリング? – haim770

+0

@ haim770そうですね、 –

+0

はい、そうですね! – Bybnovskiy

答えて

5

mouseeleave

var input = $('<input />', { 
 
    type : 'text', 
 
    on : { 
 
    mouseenter : function() { 
 
     var self = this; 
 
     
 
     $(this).val('*').data('interval', setInterval(function() { 
 
     self.value += '*'; 
 
     },1000)); 
 
    }, 
 
    mouseleave : function() { 
 
     clearInterval($(this).data('interval')); 
 
     this.value = ""; 
 
    } 
 
    } 
 
}); 
 

 
$('body').append(input);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

FIDDLE

+0

グローバルフラグを設定するのではなく、 'data'属性をうまく使います。私はそれを考えなかった:-) –

2

これを置き換えます

$(this).val('*' + $(this).val()); 

トリックあなたはまた、機能を防ぐためにclearIntervalを使用する必要が

+0

私は何か似たようなことをしましたが、うまくいきませんでした。 – Bybnovskiy

+0

これを試してください、これはうまくいくはずです。 –

+0

'$(this)'は無効です。 'this'は無名関数を参照しているからです。 ();})、1000); ; $( 'input').hover(function(){ var elm = $(this); setInterval(function(){elm.val }); ' – debute

2

を行う必要があります

setInterval(function(){ $("#input").val($("#input").val() + "*") }, 1000); 

で実行するときにマウス入力を残す。

setIntervalが返すIDを保存する必要があります。マウスが離れる(またはマウスが再び移動する)と、前の間隔のIDをクリアすることができます。

$('body').append("<input type='text' />"); 
    var id = null; 
    $('input').hover(function() { 
    var element = this; 
    clearInterval(id) 
    id = setInterval(function() { 
    $(element).val('*' + $(element).val()); 
    }, 1000) 

    }) 
    $('input').mouseleave(function() { 
    clearInterval(id) 
    console.log(id); 
    $(this).val(''); 
    }) 

https://plnkr.co/edit/wKiw8B8oihQBZU5gTcdk?p=preview

+0

はい、これは正解です。ありがとうございました! – Bybnovskiy

2

Yでそれをクリアする間隔を使用し$.dataに格納hoverでは、両方のアクションを渡すことができるので、実際にはmouseleaveを必要としません。
.hover(handlerIn, handlerOut)。 (handlerOutのシーンの背後にあるmouseleave

はアスタリスクが毎秒限り、まだマウスなどの入力に追加されなければならないホバー

var interval = null; 
$('input').hover(function() { 
    interval = setInterval(function(el){ 
    $(el).val($(el).val() + "*"); 
    }, 1000, this); 
}, function(){ 
    clearInterval(interval); 
    $(this).val(''); 
}); 

JSFiddle demo