Javascript无法使用onClick

时间:2014-01-18 17:19:50

标签: javascript html onclick

我正在重复使用网页中的javascript功能。我以两种单独的方式使用它们都以相同的形式。第一个绑定到输入字段的onChange,工作正常。第二个是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.控制台将其显示为0.我无法弄清楚为什么在onChange和onClick之间会有如此不同的对待。我已经将JS函数从onChange复制并粘贴到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)
    {

非常感谢任何帮助或输入。另外,如果我对数据很清楚,请告诉我。提前谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 永远不要在提交按钮上使用onclick
  2. 记得返回false以停止提交
  3. 你的sendata连接真的不是很有效或可读
  4. 更改

    <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;
        }
    }