首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML onsubmit事件未调用JavaScript函数

HTML onsubmit事件未调用JavaScript函数
EN

Stack Overflow用户
提问于 2016-12-31 15:22:22
回答 4查看 615关注 0票数 0

我的表单中有两个按钮,用于调用两个JavaScript函数。第一个按钮在其onclick事件中工作良好,成功地调用了payroll()函数,但第二个按钮的类型为submit,并且在提交表单时从不调用send()函数。我不知道为什么会发生这个问题。

代码语言:javascript
复制
<!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>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-12-31 15:51:13

你不能像表单元素一样使用<p>元素。您可以创建相应的<input type="hidden">元素并将其填充到payroll()中,或者通过.innerHtml获取段落的值。

附注:你实际上有一个TypeError异常,调用像document.forms['salary']['grosssalary']这样的未声明的表单元素,等等。

票数 0
EN

Stack Overflow用户

发布于 2016-12-31 15:39:03

好的,快速修复,由于您使用的是python flask库Sijax for ajax,因此使用的是jQuery,您可以像这样修改您的javascript send函数:

代码语言:javascript
复制
function send(e){
        e.preventDefault(); //it is as good as returning 
                            //false from the function in all cases

        var id = document.forms['salary']['empid'].value;
        ...
 }

并更改您的onsubmit处理程序声明,如下所示:

代码语言:javascript
复制
<form id="salary" name="salary" style="margin-top: 2%" method="post" 
          onsubmit="return send(event)" >

请注意,当您停止事件链传播时,您必须手动提交表单。因此,您可以修改您的发送函数以根据您的自定义条件执行.preventDefault,否则,让表单提交

票数 0
EN

Stack Overflow用户

发布于 2016-12-31 15:41:14

您的代码实际工作,如果您在堆栈溢出中以代码片段的形式运行此代码,则默认情况下表单提交实际上是被阻止的。尝试在codepen中运行代码。我试过了,它确实起作用了。http://codepen.io/jhonix22/pen/VPZagb

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41406360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档