2010-11-19 176 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