У меня есть две кнопки в моей форме для вызова двух функций JavaScript. Первая кнопка хорошо работает в onclick
случае payroll()
успешного вызова функции, но вторая кнопка имеет тип submit и никогда не вызывает send()
функцию при отправке формы. Я не знаю, почему эта проблема возникает.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!DOCTYPE html>
<html >
<head>
<title>hr page</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript"
src="/static/js/sijax/sijax.js"></script>
<script type="text/javascript">
{{ g.sijax.get_js()|safe }}</script>
<link rel="stylesheet" href="{{url_for('static', filename='styles/signupcss.css')}}">
<script type="text/javascript" >
function payroll() {
var basic=document.forms["salary"]["bsalary"].value;
var empid=document.forms["salary"]["empid"].value;
var ta,hra,da,pf,netsalary,grosssalary;
if (empid == ""||basic == "") {
alert("Employee ID and Salary details must be filled out");
return false;
}
if(isNaN(basic))
{alert("Salary must be in Numbers");
return false;
}
hra=basic*40/100;
da=basic*15/100;
pf=basic*12/100;
basic=parseInt(basic);
hra=parseInt(hra);
da=parseInt(da);
grosssalary=basic + hra + da;
ta=basic*6.2/100;
netsalary=grosssalary-ta;
document.getElementById("hra").innerHTML=hra;
document.getElementById("ta").innerHTML=ta;
document.getElementById("da").innerHTML=da;
document.getElementById("netsalary").innerHTML=netsalary;
document.getElementById("pf").innerHTML=pf;
document.getElementById("grosssalary").innerHTML=grosssalary;
window.alert("HI"+grosssalary);
return true;
}
function send()
{
var id = document.forms['salary']['empid'].value;
var basic = document.forms['salary']['bsalary'].value;
var hra = document.forms['salary']['hra'].value;
var da = document.forms['salary']['da'].value;
var ta = document.forms['salary']['ta'].value;
var pf = document.forms['salary']['pf'].value;
var gross_sal = document.forms['salary']['grosssalary'].value;
window.alert("HI"+gross_sal);
var net_sal = document.forms['salary']['netsalary'].value;
Sijax.request('send',[id, basic, hra, ta, da, pf, gross_sal, net_sal]);
}
</script>
</head>
<body style="font-family:Lato">
<div style="padding-left:5%;padding-top:0.2%;height:1%;width:100%;background-color:#11557c">
<h2>Welcome to HR Department</h2><br>
</div>
<div style="margin-left:15%" >
<h2>Name</h2>
<form id="salary" name="salary" style="margin-top: 2%" method="post" onsubmit="return send()" >
<label id = "empid">Employee ID</label><br>
<input type = "text" name = "empid" placeholder = "Employee ID" /><br><br>
<label id = "bsalary">Basic Salary</label><br>
<input type = "text" name = "bsalary" placeholder = "Basic salary" /><br><br>
<input type="button" value="Calculate" onclick="return payroll()"><br><br>
<label for ="hra">House Rent Allowance(HRA)</label>
<p id="hra" name="hra"></p><br>
<label for ="ta">Travel Allowance(TA)</label>
<p id="ta" name="ta"></p><br>
<label for ="da"> Dearness Allowance(DA)</label>
<p id="da" name="da"></p><br>
<label for ="netsalary">Net Salary</label>
<p id="netsalary" name="netsalary"></p><br>
<label for ="pf">Provident Fund(PF)</label>
<p id="pf" name ="pf"></p><br>
<label for ="grosssalary">Gross Salary</label>
<p id="grosssalary" name="grosssalary"></p><br><br>
<input type="submit" value="Upload Salary">
</form>
</div>
</body>
</html>
хорошо, быстрое исправление, так как вы используете Python flask library Sijax для ajax и, следовательно, jQuery, вы можете изменить свою
send
функцию javascript следующим образом:и измените объявление
onsubmit
обработчика следующим образом:обратите внимание, что при остановке распространения цепочки событий необходимо вручную отправить форму.
Таким образом, вы можете изменить свою функцию отправки, чтобы сделать
.preventDefault
на основе ваших пользовательских критериев, в противном случае, пусть форма отправитьВаш код действительно работает, если вы запускаете этот код как фрагмент здесь в Stack overflow, отправка формы фактически блокируется по умолчанию. Попробуйте запустить код
codepen
. Я попробовал, и это действительно работает.http://codepen.io/jhonix22/pen/VPZagb
Вы не можете действовать с
<p>
элементами как с элементами формы. Вы можете создать соответствующие<input type="hidden">
элементы и заполнить ихpayroll()
, или получить значения.innerHtml на параграфах.P.S. На самом деле у вас есть исключение TypeError, вызывающее необъявленные элементы формы, такие как
document.forms['salary']['grosssalary']
и так далее.Проверить это. Это далеко не идеальное решение, но я думаю, что это помогает. Вы не можете получить доступ к абзацам, как если бы Вы были входные элементы формы. Я не совсем уверен,что Sijax вещь. Я считаю, что это просто обычная вещь AJAX HTTP с какими-то фильтрами безопасности CSRF.