我有一个Bootbox(本身引导的模式之上的一层)中创建的形式。一旦它被创建,我打电话
$('#myForm').validate()
在上面。
行为的可取的是,现在通过表单的用户标签,他们能看到即时的反馈,他们已经搞砸的领域之一。打“标签”或点击其他地方之前进入了一个非电子邮件地址?警告和错误消息。大!
但不希望的事情是模糊吃其他事件。因此,如果用户选择,而不是打“取消”(明知形式无效),则单击取消未闻及处理程序将不会触发。第二次单击(现在的焦点是关闭的形式共)和如预期取消火灾。我不希望用户必须点击两次。
我看到了一种技术,用于完全禁用模糊,但随后上述所需的行为,然后输了,我不希望任何。理想情况下,“好了,我模糊了,但我也知道什么是用户点击”是我后。
[编辑补充:]
它已经到了我的注意,这是令人困惑,所以让我尝试了不同的方法的问题:是否有可能要使用表单(已经过.validate()
调用它),然后单击上的任何其他可点击项目整个页面,并有它的点击处理程序成功地火?
[再次编辑:]
基于斯帕克的演示,我有线了一个警告,表明在模糊输入以下。因此,在行动中看到的问题,启动此琴:https://jsfiddle.net/bd1fhpu3/
然后点击进入输入字段的一前点击“只是一个按钮”。点击上条子“只是一个按钮”,以确保警示标志已经被推出来光标的热点的鼠标按钮的释放。
无论如何,这只是说明是什么问题。解决这可能不是问题的范围之内了,但它似乎值得分享的情况下,任何人遇到此。要解决,我要么需要重写Bootbox的单击事件是一个鼠标按下事件,而不是一个点击(那么你并不需要按下和释放),或者我可以“创可贴”(TM)通过避免搬迁的解决方案按钮。也许一个静态的高度对话框的身高足以容纳形式和任何可能的警告。当然有些的“黑客”喜欢这样,因为你永远不知道,如果你打算做其他的事情以后,使这一问题再次出现。但它会是一个快速简便的临时补丁。
你不能使用内置的onfocuout
功能,因为JavaScript的不可能知道聚焦到另一个领域,重点出到取消按钮之间的不同。
你必须完全禁用onfocusout
编写一些自定义事件处理程序。
您的代码是稀疏的,所以我的答案是非常通用的。
$('#myForm').validate({
// other options here
onfocusout: false; // disable default blur event
});
然后写一个事件处理程序编程触发形式验证,当他们集中到一个input
,当他们集中到任何东西,就像一个取消按钮不会做任何事情。
$('#myForm input').on('focus', function() {
$('#myForm').valid(); // trigger validation on the form
});
然而,这将引发整个形式验证。如果你只是想在其上触发一个领域失去焦点的验证,那么你又回到了起点,因为事件只知道焦点消失,不到哪里去。
只是为了后人,这里是一个“答案”,如它。也许这将帮助别人有一天;你永远都不会知道。
这里是正在运行“错误地”,因此没有一个真正的修复,也没有代码示例提供任何代码。这里是发生了什么事:
然而,在#4,因为“取消”按钮,光标下不再绑定到该按钮的Click事件侦听器不火。
演示中,只要它生活在互联网上,将在下面留言。然而,提供了代码示例去与它是没有意义的。当演示死了,我会删除评论。
可能的步骤(解决方法/黑客),我选择不迄今奉行:
visibility: none
而非display: non
e。前者将隐藏文本,但仍保留了文本,后者没有(因此为什么你的模式正在扩大)的垂直空间。这从事件的内容活动期间可能移位保持按钮。你会风与多余的空格,但你可以通过取消对表单组的下边缘敲一些了这一关(假设你使用它)我敢肯定还有其他的解决方法,但是这是一个起点。