0

投稿する前に、jQuery と jQuery ValidationEngine を使用してフォームの検証を行っています。テストされているフィールドの 1 つは隠しフィールドです。これは、エラーが発生した場合に検証メッセージが画面外に表示されることを意味します。

次のコードを使用してメッセージをページの別の場所に固定していますが、異なるブラウザー間でメッセージを配置できないようです。FF 対 Chrome/IE。

 <form id="myForm">
        <input type="text" id="field1" name="field2" class="validate[required]" data-errormessage-value-missing="You must select your from the dropdown list." data-prompt-position="topRight"/>
        <input type="hidden" class="validate[required]" name="eId" id="eId" size="50" data-errormessage-value-missing="You must select from the dropdown list." data-prompt-position="topRight"/>
        <input type="submit"/>
        <div id="errorMe"/>
 </form>

エラーを配置するJavaScriptは次のとおりです。

var er = document.getElementById('errorMe');
var eId = document.getElementById('eId');
var erLeft = er.offsetLeft; /* + 25 */
var erTop  = er.offsetTop; /* - 950 */
console.log('pre = ' + eId.getAttribute('data-prompt-position'));
eId.setAttribute('data-prompt-position','topRight:'+erLeft+','+erTop);
console.log('post = ' + eId.getAttribute('data-prompt-position'));

2 つの異なる結果セット。FF では表示されるはずの場所から約 950 ピクセル下にあり、Chrome/IE では約 200 ピクセル下にあります。Safariも試していません。

それがうまくいかなかったとき、私はまた、左/上を使用して取得しようとしました:

function getOffsetRect(elem) {
var box = elem.getBoundingClientRect();

var body = document.body;
var docElem = document.documentElement;

var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;

var clientTop = docElem.clientTop || body.clientTop || 0;
var clientLeft = docElem.clientLeft || body.clientLeft || 0;

var top  = box.top +  scrollTop - clientTop;
var left = box.left + scrollLeft - clientLeft;

return { top: Math.round(top), left: Math.round(left) }

}

しかし、それはまったく同じ値になりました。

ありがとう。

4

0 に答える 0