【发布时间】:2011-08-09 14:33:58
【问题描述】:
我正在从我没有编写的 PHP 应用程序中 ajaxifying 一些表单。为此,我想出了这个聪明的解决方案:
jQuery("form").submit(function(event) {
// get some values from elements on the page:
var the_form = jQuery(this);
var data = the_form.serialize();
var url = the_form.attr( 'action' );
var button = event.originalEvent.explicitOriginalTarget;
data = data + "&" + button.name + "=" + button.value;
// Send the data using post and put the results in a div
jQuery.post( url, data, function() {
//Do something crazy
});
// stop form from submitting normally
if (event.preventDefault)
{
event.preventDefault();
}
else
{
event.returnValue = false;
}
});
效果很好。我欣喜若狂地走了。问题是,我无意中使用了仅 Mozilla/Gecko 属性来确定单击了哪个按钮。 (event.originalEvent.explicitOriginalTarget) 这意味着这只适用于 Firefox。 :-(
所有这些都是必要的,因为我正在扩充的网络应用程序依赖于发布数据中的按钮名称/值来正确处理表单。所以,简单来说我的问题是:
确定在 jQuery 的提交事件中单击了哪个按钮的最佳跨浏览器方法是什么?
编辑: 这是我的解决方案。
jQuery("some selector that targets your form").find(":submit").click(function(event) {
// get some values from elements on the page:
var the_form = jQuery(this).parents("form");
var data = the_form.serialize();
var url = the_form.attr( 'action' );
var button = event.target;
data = data + "&" + button.name + "=" + button.value;
// Send the data using post and put the results in a div
jQuery.post( url, data, function() {
//Do something crazy
});
// stop form from submitting normally
if (event.preventDefault)
{
event.preventDefault();
}
else
{
event.returnValue = false;
}
});
【问题讨论】:
-
+1 包括您的最终解决方案。对我帮助很大。
-
但是你不是在处理提交事件,而是在你的例子中点击事件,或者我错过了什么?
标签: javascript jquery cross-browser