我正在使用 jQuery 和 jQuery ValidationEngine 在发布之前进行一些表单验证。正在测试的字段之一是隐藏字段,这意味着验证消息会显示在屏幕外,以防出现错误。
我正在使用以下代码将消息锚定在页面的其他位置,但似乎无法让它在不同的浏览器中定位。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'));
两组不同的结果,在 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) }
}
但这导致了完全相同的值。
谢谢。