2016-08-15 6 views
0

フォームの検証時に、必要なフィールドにユーザーに入力を求めるプロンプトが表示されます。フローティングナビゲーションバーを使用した要素IDのJavaScript Focus()?

通常です。あなたがに集中したい要素が最初のものであるときに、画面の上部に浮いナビゲーションバーを扱う場合

document.getElementById("idHere").focus(); 

、これは常に動作しない、主に、それは、フローティングナビゲーションの後ろに隠します。

フォーカスを設定した数のピクセルを下に移動して、ナビゲーションメニューのサイズを考慮していることを確認する便利な方法はありますか?

+0

これに対してフィドルを作成できますか? –

+0

ナビゲーションバーのHTML/CSSを表示できると便利です。 –

+0

これはどのようにフォーカスに関連していますか?フォーカスがない場合、入力は既に「ナビゲーションバー」でカバーされています。 – trincot

答えて

1

スクロール機能を関数またはonFocus要素に追加する必要があります。 このようになる可能性があります:

window.scrollTo(window.scrollX , document.getElementById("idHere").scrollTop + 80); 
+0

これは私が必要とするものですが、動作しないようです。次の行は 'submit false'であり、送信されたフォームが動作しないことを保証しますが、このコード行を追加すると無視されます。何か案は? –

+0

@MichaelCropper修正済みです。 ;) –

+0

完璧、ありがとう:-) –

1

ここでは、jQuery関数としての解決策を示します。セレクタを使用するには、どのような要素でも動作させたいセレクタを渡します。例bindFocusScroll('input, select');

function bindFocusScroll(selector){ 
    var navHeight = 192; 
    var padding = 25; 
    $(selector).on('focus', function() { 
    try { 
     var elemTop = $(this).offset().top; 
     var maxVisible = $(document).scrollTop() + navHeight; 
     if (elemTop < maxVisible) { 
     $("html, body").animate({ scrollTop: elemTop - navHeight - padding }, 250); 
     } 
    } catch (e) { 
     console.log("Error: " + e); 
    } 
    }); 
} 

のためには、アニメーションやあなただけのササンの答えを使用することができますスマートであることを、それを必要としない場合。必要に応じて、この回答をvanilla JSで再作成するのを手助けすることもできます。

+0

jQueryは完璧です。これは私の後ろのものとまったく同じように見えますが、これを実現するために苦労しています。私はページのJSに関数を追加してから、 'document.getElementById(" idHere ")。focus();'のコードを使用していましたが、 'bindFocusScroll( '入力、選択 '); '、しかし私は引用符の中に何を入れるのか分からない"私はこれが動作するようになっていない理由です。私はそれを正しく実装していませんか? –

+0

申し訳ありませんが、すぐにこれが表示されませんでした。問題はフォーカスコマンドを置き換えたことです。あなたはまだ焦点を当てる必要があります。 'bindFocusScroll'はちょうどあなたがフォーカスをするときに余分なスクロールビットを行うようにします。これの利点は、ユーザーが要素(タブなど)をフォーカスする場合、同じ動作をすることです。 – dlsso

+0

パーフェクト、ありがとう:-) –

関連する問題