2014-01-18 63 views
0

我在網頁中重複使用javascript函數。我以相同的形式以兩種不同的方式使用它。第一個綁定到輸入字段的onChange,它工作正常。第二個是在窗體結尾處按鈕的onClick。這裏就是打開表單Javascript不能與onClick搭配使用

<form method="POST" action="new_emissions.php?action=<?php echo $action;?>" 
id="emissionsform" enctype="multipart/form-data"> 

我會發布整個事情,但它變得有點長,不想煩你用的東西,工作。 這是的onChange它的工作原理

<td><input type="text" size=6 value="<?php echo $orno; ?>" name="orno" 
id="orno"onChange="fLookup('orno', '<? echo $fileQuadJ; ?>', '<? echo $fileQuadO; ?>', '<? echo $fileQuadZ; ?>')"></td> 

而這正是它不

<input type="submit" value="Save" 
onClick="fLookup('all', '<? echo $fileQuadJ; ?>', '<? echo $fileQuadO; ?>', '<? echo $fileQuadZ; ?>')"> 

的的onChange和的onClick都是相同的窗體上的按鈕。
這是JS函數的第一部分。它在http.status和http.readyState的if語句中失敗。檢查控制檯的這兩個,當onChange被調用時,一切看起來都很好,所有內容都可以正常工作。 onClick失敗,因爲http.status不是200. console顯示爲0.我無法弄清楚爲什麼onChange和onClick之間的處理方式會有所不同。我已經將onChange的JS函數複製並粘貼到onClick,但仍然沒有任何結果。

function fLookup(field, quadJ, quadO, quadZ) { 
var sendData = ''; 
sendData = sendData + '&cins='+document.getElementById('cins').value; 
if(field == 'eser' || field == 'all') 
    sendData = sendData+'&eser='+document.getElementById('eser').value; 
if(field == 'orno' || field == 'all') 
    sendData = sendData+'&orno='+document.getElementById('orno').value; 
if(field == 'emno' || field == 'all') 
    sendData = sendData+'&emno='+document.getElementById('emno').value; 
if(field == 'ddat' || field == 'all') 
    sendData = sendData+'&ddat='+document.getElementById('ddat').value; 
if((field == 'cdat1' || field == 'all') && document.getElementById('cdat1')) 
    sendData = sendData+'&cdat1='+document.getElementById('cdat1').value; 
if((field == 'cdat2' || field == 'all') && document.getElementById('cdat2')) 
    sendData = sendData+'&cdat2='+document.getElementById('cdat2').value; 
if((field == 'cdat3' || field == 'all') && document.getElementById('cdat3')) 
    sendData = sendData+'&cdat3='+document.getElementById('cdat3').value; 
if((field == 'cdat4' || field == 'all') && document.getElementById('cdat4')) 
    sendData = sendData+'&cdat4='+document.getElementById('cdat4').value; 
if((field == 'cdat5' || field == 'all') && document.getElementById('cdat5')) 
    sendData = sendData+'&cdat5='+document.getElementById('cdat5').value; 
if((field == 'cdat6' || field == 'all') && document.getElementById('cdat6')) 
    sendData = sendData+'&cdat6='+document.getElementById('cdat6').value; 
if(quadJ == '1') 
    sendData = sendData + '&checkJ=1'; 
if(quadO == '1') 
    sendData = sendData + '&checkO=1'; 
if(quadZ == '1') 
    sendData = sendData + '&checkZ=1'; 

sendData = sendData + '&field='+field; 
sendData = sendData + '&type=fLookup'; 

//alert(sendData); 
http.abort(); 
http.open('post','emissionValidate.php'); 
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
http.send(sendData); 
http.onreadystatechange = function() 
{ 
    console.log(http.readyState, http.status, sendData); 
    if(http.readyState == 4 && http.status == 200) 
    { 

任何幫助或輸入是非常感謝。另外,如果我對數據輕鬆,請讓我知道。提前致謝!

+0

一個較短的版本,爲什麼你的onclick使用在一個形式提交?你不能使用isset嗎?您當前的提交按鈕是否觸發了您的表單操作?當你點擊你的提交按鈕時,它會去new_emissions.php?action = <?php echo $ action;?> – Bowenac

+0

和任何新聞用戶3210302? – mplungjan

+0

@Bowenac它應該將信息發回到new_emissions.php。在這一點上,我會在我的提交按鈕上解決POST問題,以防止出現問題。我提出了更新mplungjan的建議,但我開始懷疑我的FTP是否無法正常工作,因爲它看起來沒有變化。再次感謝您花時間瀏覽這些內容。對此,我真的非常感激! – user3210302

回答

1
  1. 從未使用onclick上一個提交按鈕
  2. 記得返回false阻止提交
  3. 您sendata串聯真的不是非常有效或可讀

變化

<input type="submit" value="Save" 
onClick="fLookup('all', '<? echo $fileQuadJ; ?>', '<? echo $fileQuadO; ?>', '<? echo $fileQuadZ; ?>')"> 

<form onsubmit="return fLookup('all', '<? echo $fileQuadJ; ?>', '<? echo $fileQuadO; ?>', '<? echo $fileQuadZ; ?>')"> 
... 
<input type="submit" value="Save"/> 
</form> 

和fLookup結束與return false;

這裏的功能是你的功能代碼

var sendData = 'field='+field + '&type=fLookup' + '&cins='+document.getElementById('cins').value; 
if(quadJ == '1') sendData += '&checkJ=1'; 
if(quadO == '1') sendData += '&checkO=1'; 
if(quadZ == '1') sendData += '&checkZ=1'; 

var fields = ["eser","orno","emno","ddat"]; 
for (var i=1;i<=6;i++) if (document.getElementById('cdat'+i)) fields.push('cdat'+i); 
for (var i=0;i<fields.length;i++) { 
    var theField = fields[i]; 
    if (field ==="all" || field===theField) { 
     sendData+="&"+theField+"="+document.getElementById(theField).value; 
    } 
} 
+0

謝謝你的回覆。我是一個剛剛起步的程序員,所以我現在的代碼只是別人構建的其他頁面的組合。我現在要更新代碼。我會很快回復 – user3210302

+0

記住強制返回false作爲函數中的最後一個語句,否則表單會干擾ajax。還要將.send移到onreadystate賦值後 – mplungjan

+0

好的,我已經對@mplungjan進行了修改。嘗試發佈時,我仍然遇到錯誤。我添加了返回false;到fLookup()就在submit語句的正下方。我會上傳一張圖片,但我不確定如何添加錯誤的屏幕截圖。 這裏是圖片的鏈接。 http://screencast.com/t/dw663xVb最上面的POST來自一個onchange調用。第二個來自提交按鈕。 – user3210302