0

jqueryを使用して基本的な検証を実行しようとしているフォームがあります。入力の名前に対応する名前の空のアンカーがあります。最初のフィールドが空の場合、入力の名前が格納され、検証スクリプトが完了すると、空のアンカーの名前である window.location.hash = name + "hash" が呼び出されます。問題は、アンカーが画面の一番上に表示されるようにウィンドウを移動していることです。アンカーが画面の中央に表示されるようにウィンドウを移動したいと思います。これは可能ですか?これが私が持っているものです。

function formValidate()
{
var $retValue = true;
var $inputs = $('.req');
var $winLoc = '';
$inputs.each( function()
{
    if($(this).val() === "" && this.name != "salesmanName2")
    {
        var $helper = this.name + "Help";
        var $pointer = this.name + "Pointer";
        event.preventDefault();
        ($(this).addClass('reqMissing'));
        showHelper($helper, $pointer);
        if($winLoc == '' && this.name != "salesmanName2")
        {
            $winLoc = this.name + "Anchor"; 
        }
        $retValue = false;
    }
    else
    {
        ($(this).removeClass('reqMissing'));    
    }
});
if($winLoc !== '')
{
    window.location.hash=$winLoc;
}
return $retValue;   
}

そして、これがフォームのスニペットです。

<li>
    <a name="controlNumberAnchor"></a>
    <label for='controlNumber'>Control Number: </label>
    <input class='req' type='text' name='controlNumber' size='10' /><em>*</em>
    <div id='controlNumberPointer' class='pointer'></div>
    <div id='controlNumberHelp' class='helpBox'>Control number required</div>
</li>
4

3 に答える 3

2

ハッシュを使用するだけでは不可能です。scrollTopハッシュに基づいて計算された値を使用して、ドキュメントのを設定する必要があります。これを試して。

function formValidate()
{
var $retValue = true;
var $inputs = $('.req');
var $winLoc = '';
$inputs.each( function()
{
    if($(this).val() === "" && this.name != "salesmanName2")
    {
        var $helper = this.name + "Help";
        var $pointer = this.name + "Pointer";
        event.preventDefault();
        ($(this).addClass('reqMissing'));
        showHelper($helper, $pointer);
        if($winLoc == '' && this.name != "salesmanName2")
        {
            $winLoc = this.name + "Anchor"; 
        }
        $retValue = false;
    }
    else
    {
        ($(this).removeClass('reqMissing'));    
    }
});
if($winLoc !== '')
{
    //window.location.hash=$winLoc;
    var top = $('[name=' + $winLoc + ']').offset().top;
    $(document).scrollTop(top - ($(window).height()/2)); 
}
return $retValue;   
}
于 2012-01-13T18:28:34.730 に答える
0

画面上部へのアンカーは標準の .hash 動作です。私の知る限り、それをオーバーライドする方法はありません。

ドキュメント内で、中央に配置したいコンテンツよりも 1/2 画面上にアンカーを配置することで、目的の動作を実現できる場合があります。トリッキーですが、既知の次元特性のコンテンツで可能です。

于 2012-01-13T18:31:04.517 に答える