将我的 jQuery 单击事件与现有对象的 onclick 属性混合
我正在使用 jQuery,但处理由 JSF 页面生成的标记。许多元素都具有 JSF 代码提供的 onclick 属性(这不是我的领域)。
示例:
<div onclick="[jsf js to submit form and go to next page]">submit</div>
我正在尝试使用 jQuery 添加一些客户端验证。我需要类似这样的伪代码:
$('div').click(function(e){
if(myValidation==true){
// do nothing and let the JS in the onlick attribute do its thing
} else {
$error.show();
// somehow stop the onclick attribute JS from firing
}
})
是否有处理此问题的最佳实践?
我的一个想法是,在页面加载时,获取 onclick 属性的值,从对象中删除 onclick 属性,然后......好吧,这就是我迷失的地方。我可以将 JS 作为文本缓存在 data- 属性中,但我不确定稍后如何将其关闭。
I'm using jQuery but dealing with markup produced from JSF pages. A lot of the elements have onclick attributes provided by the JSF code (which isn't my realm).
Example:
<div onclick="[jsf js to submit form and go to next page]">submit</div>
I'm trying to add some client side validation with jQuery. I need something like this pseudo code:
$('div').click(function(e){
if(myValidation==true){
// do nothing and let the JS in the onlick attribute do its thing
} else {
$error.show();
// somehow stop the onclick attribute JS from firing
}
})
Is there a best-practice for handling this?
One thought I had was that on page load, grab the onclick attribute's value, delete the onclick attribute from the object, then...well, that's where I get lost. I could cache the JS as text in a data- attribute, but I'm not sure how to fire that off later.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
如果需要,只需使用
eval
在 jQuery 单击事件中运行 onclick 属性代码即可。您需要删除onclick
属性-
Just use
eval
to run onclick attribute code in your jQuery click event if you want it. You need to removeonclick
attribute-
返回 false 或使用:
或
根据您的需要。
Either return false or use:
or
Depending on your needs.
编辑
您可以保存原始事件:
看看这个http://jsfiddle.net/j4jsU /
将 if(false) 更改为 if(true) 以查看表单有效时会发生什么。
EDIT
You can save original event:
take a look at this http://jsfiddle.net/j4jsU/
Change if(false) to if(true) to see what hepens when form is valid.
我喜欢 e.stopProgation() 和 e.preventDefault(),但如果您不喜欢该策略,您也可以手动删除 onclick() 属性并手动调用它在成功验证后使用的函数。
不同的笔画..
I like e.stopProgation() and e.preventDefault(), but if you do not prefer that strategy, you could also manually remove the onclick() attribute and manually call the function it was using upon successful validation.
Different strokes..
为什么你不能做这样的事情:
Why can't you do something like: