Javascript не работает с onClick

0

Я повторно использую функцию 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. Он не работает в инструкции 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 для отправки в форме? Не можете ли вы использовать, если isset? Разве ваша текущая кнопка отправки не запускает действие формы? Когда вы нажимаете кнопку «Отправить», она переходит к new_emissions.php? Action = <? Php echo $ action;?>
  • 0
    А какие новости у пользователя 3210302?
Показать ещё 1 комментарий
Теги:
onclick

1 ответ

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
    Спасибо за ответы. Я очень молодой программист, поэтому мой код сейчас представляет собой просто комбинацию других страниц, созданных кем-то другим. Я собираюсь обновить код прямо сейчас. Я отвечу в ближайшее время с любой удачей
  • 0
    Запомните обязательный возврат false в качестве последнего оператора в функции, иначе форма будет мешать работе Ajax. ТАКЖЕ переместите .send, чтобы ПОСЛЕ задания onreadystate
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню