2014-01-18 4 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. Он не работает в инструкции if для http.status и http.readyState. Проверка консоли для этих двух, все выглядит нормально, когда 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) 
    { 

Любая помощь или ввод приветствуется. Кроме того, если я освещен данными, пожалуйста, дайте мне знать. Заранее спасибо!

+0

Почему вы используете OnClick с представить в форме? Не можете ли вы использовать ifseet? Разве ваша текущая кнопка отправки не запускает действие вашей формы? Когда вы нажмете кнопку «Отправить», она перейдет на new_emissions.php? Action = Bowenac

+0

И любые новости user3210302? – mplungjan

+0

@Bowenac Он должен отправить информацию обратно на new_emissions.php. На данный момент я соглашусь на POST на моей кнопке отправки, чтобы просто не подгонять. Я сделал обновления mplungjan, но я начинаю задаваться вопросом, не работает ли мой FTP, поскольку, похоже, изменения не принимаются. Еще раз спасибо вам за то, что нашли время, чтобы просмотреть этот материал. Я очень ценю это! – user3210302

ответ

1
  1. никогда не использовать OnClick на кнопку отправить
  2. забудьте вернуть ложь, чтобы остановить представления
  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 как последнее выражение в функции, иначе форма будет мешать аяксу. ТАКЖЕ переместите .send, чтобы ПОСЛЕ назначения onreadystate – mplungjan

+0

Хорошо, я внес изменения, которые вы предложили @mplungjan. Я все еще получаю сообщение об ошибке при попытке опубликовать сообщение.Я добавил return false; в fLookup() прямо под заявлением о представлении. Я бы загрузил картинку, но я не совсем уверен, как добавить скриншот ошибки. Это ссылка на картинку. http://screencast.com/t/dw663xVb верхний POST - это один из вызовов onchange. второй - с кнопки отправки. – user3210302

Смежные вопросы