2016-09-20 8 views
0

入力をクリックするとdivを非表示にします。 divは、Androidのネイティブキーボードに問題が発生した静的ユーティリティのナビゲーションバーです。ここにコードがありますが、問題は9回、時には10回実行され、バックエンドの開発者はパフォーマンス上の問題であると言います。これを防ぐために私は何ができますか?私はjavaScriptとjQueryの初心者です。入力がクリックされたときにdivを非表示にします

function utilityNav() { 
    if($(window).width() < 891) { 
    //Utility Mobile Nav background-color 
    var div = $('.navbar-static-bottom').show(); 
    $('input').focus(function() { 
    $('.navbar-static-bottom').fadeOut(); 
    $("."+$(this).attr('input')).fadeIn(); 
    }); 

    $('input').blur(function() { 
    $('.navbar-static-bottom').fadeIn(); 
    }); 
    } 
} 
utilityNav(); 
$(window).on('resize', utilityNav); 
$('input').blur(utilityNav); 

答えて

0
 //Setup 
    function utilityNav() { 
    if($(window).width() < 891) { 
     //Utility Mobile Nav background-color 
     $('.navbar-static-bottom').show(); 
    } 
    } 
    function setupUtil(){ 
    $('body').on('focus', 'input', debounce(function(e) { 
     if($(e.currentTarget).is(':focus')) { 
     $('.navbar-static-bottom').fadeOut(); 
     } 
    }, 100)); 

    $('body').on('blur', 'input', debounce(function(e) { 
     if(!$(e.currentTarget).is(':focus')) { 
     $('.navbar-static-bottom').fadeIn(); 
     } 
    }, 100)); 
    } 

    setupUtil(); 
    $(window).on('resize', utilityNav); 
1

これは何度も実行されている理由は、ウィンドウのサイズを変更すると、これまでにイベントが追加されているからです。

ウィンドウのサイズを変更すると、イベントは複数回発生します。ウィンドウのサイズが変更されるたびに、新しいイベントが追加されます。

これを行う必要があります。

//SETUP 

function utilityNav() { 
    if($(window).width() < 891) { 
    //Utility Mobile Nav background-color 
    $('.navbar-static-bottom').show(); 
} 

function Setup(){ 
    $('input').focus(function() { 
    $('.navbar-static-bottom').fadeOut(); 
    $("."+$(this).attr('input')).fadeIn(); 
    }); 

    $('input').blur(function() { 
    $('.navbar-static-bottom').fadeIn(); 
    utilityNav(); 
    }); 
    } 
} 


utilityNav(); 
$(window).on('resize', utilityNav); 

これはテストしていませんが、構造的にはこれが必要です。 さらに改善が必要な場合があります。 イベントを入力タグに配置する代わりに、代理人を使用する必要があります。あなたはこれを読むことができます。

たとえば、後で新しい入力ボックスをページに追加する場合です。これはうまくいかないでしょう。

+0

あなたのコードは機能しませんでしたが、正しい答えにつながると思いますので、私は本当に本当に本当に感謝しています。 – user2025730

+0

(a)正しい解決策を説明し、(b)私の回答を編集できるようにし、(c)結果をアップアップして、他者が解決策を見て提示することが賢明でしょう。それはちょうど良いマナーです;) –

+1

Lpc_dark私は謝罪しています私は不注意にしようとしていません。私は今日これでうまくいくでしょう。私のプロジェクトは最終的な打ち上げ準備に入っており、現時点でリリースに集中しなければなりません。簡単に説明すると、私は入力のためにボディをターゲットにし、フォーカスイベントは、それがフォーカスされたときにユーティリティバーを隠していました。私はデバウンスと遅延タイマーを使用してユーティリティナビが隠れた状態に保たれ、 "入力をクリアする。私はこれを助け、方向づけてくれて本当に感謝しています。ありがとうございました!) – user2025730

関連する問題