2011-01-03 5 views
0

SetFocusOnError = trueのときのデフォルトのスクロールを無効にする方法はありますか?今すぐ、コントロールの上部が(0,0)になるように、ユーザーをページ上にポップします。問題は、私たちのラベルがコントロールの上にあるため、ユーザーは少しスクロールせずにラベルを見ることができないということです。私は代わりにそれをコントロールの中心にしたいと思うし、理想的には素敵な滑らかなjQueryのスライドをアップすることさえしたい。 (解雇れることは決してありません)ASP.NET:RequiredValidatorsのカスタムSetFocusOnError動作

は、私はこのようにしようとしたが、それはうまくいきませんでした:

function WebForm_AutoFocus(obj) { 
elem = document.getElementById(obj).scrollTop() - 200; //Go to 200px above where the element is 
$('html, body').animate({ scrollTop: elem }, 350) 

}

答えて

2

より良い方法が、1つの方法はに呼ばれValidatorSetFocus方法をカスタマイズすることであるかもしれません

$(function() { 
// on first time page load 
if (typeof (Page_ClientValidate) != "undefined") { 
    ValidatorSetFocus = CustomSetFocus; 
} 
} 

     function CustomSetFocus(val, event) { 
      var ctrl; 
      if (typeof (val.controlhookup) == "string") { 
       var eventCtrl; 
       if ((typeof (event) != "undefined") && (event != null)) { 
        if ((typeof (event.srcElement) != "undefined") && (event.srcElement != null)) { 
         eventCtrl = event.srcElement; 
        } 
        else { 
         eventCtrl = event.target; 
        } 
       } 
       if ((typeof (eventCtrl) != "undefined") && (eventCtrl != null) && 
      (typeof (eventCtrl.id) == "string") && 
      (eventCtrl.id == val.controlhookup)) { 
        ctrl = eventCtrl; 
       } 
      } 
      if ((typeof (ctrl) == "undefined") || (ctrl == null)) { 
       ctrl = document.getElementById(val.controltovalidate); 
      } 
      if ((typeof (ctrl) != "undefined") && (ctrl != null) && 
     (ctrl.tagName.toLowerCase() != "table" || (typeof (event) == "undefined") || (event == null)) && 
     ((ctrl.tagName.toLowerCase() != "input") || (ctrl.type.toLowerCase() != "hidden")) && 
     (typeof (ctrl.disabled) == "undefined" || ctrl.disabled == null || ctrl.disabled == false) && 
     (typeof (ctrl.visible) == "undefined" || ctrl.visible == null || ctrl.visible != false) && 
     (IsInVisibleContainer(ctrl))) { 
       if ((ctrl.tagName.toLowerCase() == "table" && (typeof (__nonMSDOMBrowser) == "undefined" || __nonMSDOMBrowser)) || 
      (ctrl.tagName.toLowerCase() == "span")) { 
        var inputElements = ctrl.getElementsByTagName("input"); 
        var lastInputElement = inputElements[inputElements.length - 1]; 
        if (lastInputElement != null) { 
         ctrl = lastInputElement; 
        } 
       } 
       if (typeof (ctrl.focus) != "undefined" && ctrl.focus != null) { 
        ctrl.focus(); 
        Page_InvalidControlToBeFocused = ctrl; 
      var span = $($("#" + ctrl.id)[0]).prevAll('span'); 
      elem = $(span[0]).offset().top; //Go to 200px above where the element is 
      $('html, body').animate({ scrollTop: elem }, 350); 
       } 
      } 

     } 

徹底的にテストされていないので、それが機能するかどうかを確認してください。

関連する問題