我有一个带有验证插件设置的表单。提交表单并有错误时,我在对话框中显示错误字段(非模态)。
表单可以非常快速地完成(业务需求不断添加字段)并且我在对话框中使用errore'd字段可单击以将窗口滚动到from中的字段并突出显示字段。此时不会关闭该对话框。
这个对话框的中心位于开始时,一旦用户开始点击链接,我需要移出用户方式的对话框并突出显示(jQuery效果)下面的字段。
要做到这一点,我已经提出了以下代码,对话框似乎是动画到顶部但不是右边。当我将'right'改为'left'时,它可以正常工作。
下面是代码和jsbin一起玩 - http://jsbin.com/avigi3/4/
$('a.field').click(function(){
$(this).closest('.ui-dialog').animate( {
right : '0', /*left:'0' works fine here*/
top : $(window).scrollTop()
}, 'slow');
});
我调试了jQuery.animate代码,这是我的笔记:
有没有人面对这个问题?我有可能重置对话框的“正确”位置,以便它具有“某些”价值?或者我可以配置jQuery对话框,使其在以编程方式更改位置时动画,而不是通过拖动手动更改。
谢谢,
-Syam
答案 0 :(得分:5)
试试这个
$('a.field').click(function(){
dialog = $(this).closest('.ui-dialog')
dialog.animate( {
left: document.width - dialog.width(), // or you might want to use .outerWidth()
top: $(window).scrollTop()
}, 'slow');
});
答案 1 :(得分:4)
对于未来的读者,Shrikant的答案将是一个更快的解决方案,并且特定于呼叫,它工作正常。只需更改宽度即可使用offsetWidth()来考虑填充/边距。
我最后通过jQuery UI代码到最后并找到了一个通用的实现。这是针对jquery-ui 1.8.10。
一旦通过计算{left:xxx,top:xxx}计算出移动对话框的位置,jQuery-dialog就会使用Position实用程序来定位和重新定位ui-dialog div。 Position的一个选项是'使用'功能。如果定义了'using',它会触发该函数并传入{left:xxx,top:xxx}的对象。如果没有定义,它只是在ui-dialog上更新css。以下是代码片段:
line number 9977 in jquery-ui version 1.8.10:
if ( 'using' in options ) {
options.using.call( elem, props );
} else {
curElem.css( props );
}
你可以在Position默认值上覆盖'using'属性,但由于我的用法仅用于对话框,我在对话框原型上覆盖了它:
$.extend($.ui.dialog.prototype.options, {
position : {
using : function(props) {
$(this).animate( {
left : props.left,
top : props.top
}, 'slow');
}
}
});
我希望这有帮助!
谢谢, -Syam