2010-11-19 86 views
1

这可能会倒退。我需要一个表单提交返回false,但仍然提交表单。提交返回False,但仍提交表单 - PHP,Javascript,AJAX,CodeIgniter

我有一个窗体被拉到一个页面通过ajax(jQuery的加载功能),并提交我想显示一个图形和一些文本在同一个div,而不是重定向页面。

这是我的提交按钮(笨):

<?php $attributes = array('class' => 'button', 'onclick' => 'form_success_client(); return false;', 'name' => 'submit'); echo form_submit($attributes, 'Save'); ?> 

和HTML:

<input type="submit" onclick="form_success(); return false;" class="button" value="Save" name="submit"> 

并加载成功消息的JavaScript函数:

function form_success_client() { // form success 
    $('.contentarea').load("/mm/index.php/site/form_success_client/"); 
} 

这一切工作正常,但不太好,它不提交表格。我知道这样做的正确方法是将表单提交传递给jquery,但我不知道该怎么做。如果可能的话,可以做一个快速修复(直到我有时间排除一个更好的解决方案),但所有建议表示赞赏。

谢谢!

答:

这是什么工作对我来说,张曼玉的回答只是微微编辑:

function form_success_client(obj) { 
    $.ajax({ 
     type: 'POST', 
     url: $(obj).attr('action'), 
     data: $(obj).serialize(), 
     success: function(msg){ 
     $('.contentarea').load("/mm/index.php/site/form_success_client/"); 
     } 
    }); 
    return false; 
} 

注意对URL和数据$()包装OBJ。

+0

那是什么回报假呢?永远会有什么结果呢?是吗? – zod 2010-11-19 16:29:00

回答

2

将你的JS onclick事件绑定到表单(不是按钮),像这样 'onclick' => 'form_success_client(this); return false;'

,改变你的函数

function form_success_client(obj) { 
    $.ajax({ 
     type: "POST", 
     url: obj.attr("action"), 
     data: obj.serialize(), 
     success: function(msg){ 
     $('.contentarea').load("/mm/index.php/site/form_success_client/"); 
     } 
    }); 
} 

未经检验

+0

嗨@maggie,对于延迟抱歉。这个响应看起来不错,但是我得到了obj.attr和obj.serialize的错误 - 'obj.attr在萤火虫中不是函数'。 – Robimp 2010-11-22 10:02:32

+0

* faceslap *当然,如果您发现了jQuery'$(obj)', – teemitzitrone 2010-11-22 14:16:20

1

可能的解决方法。我坚持你的代码

<input type="submit" onclick="form_success_client(this); return false;" class="button" value="Save" name="submit"> 

function form_success_client(i) { 
    formData = $(i).parents('form').serialize(); 
    $.post("/mm/index.php/site/form_success_client/", formData, function(loaded) { $('.contentarea').append(loaded) }, 'html'); 
} 

编辑:是的,正如玛吉说,你应该绑定form_success_client(this); return false;

<form onsubmit="form_success_client(this); return false;"> 

没有按钮

+0

我相信如果您将事件附加到表单上(或许是最好的),那么当您执行.parents('form')时,我们会在形式上做到这一点,并获得一切回报。这只是通过我的头脑js引擎运行它,尽管我可能是错的。只是真正的意见,你需要添加更多一点到你的编辑。 :) – Chris 2010-11-19 16:59:03