javascript - 为什么这个java脚本函数会导致页面回发

标签 javascript c# jquery asp.net webforms

我正在尝试使用此演示 http://szimek.github.io/signature_pad 将签名字段放入网络表单页面中代码为https://github.com/szimek/signature_pad .

为什么当我点击清除按钮时整个页面重新加载(发生回发)? 这不是客户端调用吗? 如何预防?

aspx html:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta charset="utf-8">
    <title>Signature Pad demo</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <meta name="description" content="Signature Pad - HTML5 canvas based smooth signature drawing using variable width spline interpolation.">
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="stylesheet" href="css/signature-pad.css">
</head>
<body>
    <form id="form1" runat="server">
    <div id="signature-pad" class="m-signature-pad">
        <div class="m-signature-pad--body">
            <canvas></canvas>
        </div>
        <div class="m-signature-pad--footer">
            <div class="description">
                Sign above</div>
            <button class="button clear" data-action="clear">
                Clear</button>
            <asp:Button Text="Save" runat="server" ID="btnSave" CssClass="button save" data-action="save"
                OnClick="Save" />
        </div>
        <script src="js/signature_pad.js"></script>
        <script src="js/app3.js"></script>
        <input type="hidden" id="hfSign" runat="server" />
    </div>
    </form>
</body>
</html>

app3.js:

var wrapper = document.getElementById("signature-pad"),
    clearButton = wrapper.querySelector("[data-action=clear]"),
    saveButton = wrapper.querySelector("[data-action=save]"),
    canvas = wrapper.querySelector("canvas"),
    signaturePad;

// Adjust canvas coordinate space taking into account pixel ratio,
// to make it look crisp on mobile devices.
// This also causes canvas to be cleared.
function resizeCanvas() {
    // When zoomed out to less than 100%, for some very strange reason,
    // some browsers report devicePixelRatio as less than 1
    // and only part of the canvas is cleared then.
    var ratio = Math.max(window.devicePixelRatio || 1, 1);
    canvas.width = canvas.offsetWidth * ratio;
    canvas.height = canvas.offsetHeight * ratio;
    canvas.getContext("2d").scale(ratio, ratio);
}

window.onresize = resizeCanvas;
resizeCanvas();

signaturePad = new SignaturePad(canvas);

clearButton.addEventListener("click", function (event) {
    signaturePad.clear();
});

saveButton.addEventListener("click", function (event) {
    if (signaturePad.isEmpty()) {
        alert("Please provide signature first.");
    } else {
        document.getElementById("hfSign").value = signaturePad.toDataURL();
    }
});

C# 背后的代码:

protected void Save(object sender, EventArgs e)
        {
            string signature = hfSign.Value;
            if (!String.IsNullOrEmpty(signature))
                btnSave.Text = "Signature Saved!";
        }

最佳答案

表单中任何按钮的默认行为都是提交表单。快速回答是这样的:

clearButton.addEventListener("click", function (event) {
    signaturePad.clear();
    event.preventDefault(); // stop form submit.
});

更正确的答案是将按钮更改为:

<input type="reset" name="reset" value="Clear" />

然后您可以删除clearButton.addEventListener函数并让重置按钮的默认行为清除表单。

关于javascript - 为什么这个java脚本函数会导致页面回发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32618917/

相关文章:

javascript - 如何使用 jQuery 多次复制列表元素

javascript - 如何处理整个组件的事件 Action ?

javascript - 将解析值分配给全局变量 - promise

jquery - 使用 bootstrap studio 无法点击 Bootstrap input-group-addon

jquery - 为什么 jQuery 1.9+ attr() 方法没有被弃用?

javascript - node.js 聊天应用中callback()的含义或源代码

c# - C# 中的动态数组(vb.net 片段)

c# - Mono 上的简单 HttpClient 测试失败

c# - 事件目录 : find details of users in group without mass search

javascript - 检测 iframe 中的点击