简单的javascript错误-按钮点击附加查询字符串表单提交



我有一个简单的表单,当单击按钮时,它通过连接计算链接,并通过覆盖现有方法在同一页面上输出链接。页面不应该重定向到任何地方,甚至是它自己。

问题是它将查询字符串附加到URL(即/linkgenerator.html变成/linkgenerator.html?generatelink=Generate+Link#),这实际上会导致两件事发生:

1)表单第一次正确提交,然后立即再次重新加载页面,丢失了您的输入。一旦你在重新加载的页面上再次提交,就可以了。

2)查询字符串导致脚本不工作-周期-在IE7本地文件系统上运行

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SRP Link Generator</title>
    <script language="javascript" type="text/javascript">
        function dogeneratelink()
        {
                var code1= document.getElementById("code1").value;
                var brand = document.getElementById("brand").value;
                var code2= document.getElementById("code2").value;
                var errors = checkerrors(prop, srp);
                if (errors)
                {
                    alert(errors);
                    return;
                }

                var link = "http://www." + brand + ".com/" + code1 + "/" +  code2;
                var a = document.getElementById("link");
                a.href = link;
                a.textContent = link;           
        }
        function doclear()
        {
            var a = document.getElementById("link");
            a.href = '';
            a.textContent = '';
        }
        function checkerrors(code1, code2)
        {
                var errors;
                var propset;
                if (code1.length != 5) 
                {
                    errors = "You must enter a valid Code 1";
                    code1set = 1;
                }
                if ((code2.length < 4) || (code2.length > 5))
                {
                    if (code1set == 1)
                    {
                        errors += " and Code 2";
                    }
                    else
                    {
                        errors = "You must enter a valid Code 2";
                    }
                }
                return errors;
        }
    </script>
</head>
<body>

    <form action="#">
        <h1>Link Generator</h1>
        <div class="row">
            <label>Code 1:</label>
            <input type="text" id="code1" />
        </div>
        <div class="row">
            <label>Brand:</label>
            <select id="brand">
                <option value="brand1">Brand 1</option>
                <option value="brand2">Brand 2</option>
                <option value="brand3">Brand 3</option>
            </select>
        </div>
        <div class="row">
            <label>Code 2:</label>
            <input type="text" id="code2" />
        </div>
        <div class="row">
        <div class="buttonrow">
        <input type="submit" onclick="dogeneratelink()" id="generatelink"  name="generatelink" value="Generate Link" class="button"/>
        <input type="submit" onclick="doclear()" id="clear" value="Clear" class="button"/>
        </div>
        </div>
     </form>
     <div id="generatedlink"><a id="link"></a></div>
</body>
</html>

我试过把action="#"拿出来,但它似乎没有做任何事情。

所有我想要的是链接被计算并立即显示在屏幕上。

期待您的反馈!谢谢!

edit由于您建议将提交类型更改为按钮,该表单现在在提交时表现正常。

该脚本在Firefox中可以完美地工作。不幸的是,我需要它在IE7中工作,但它没有。正确地调用了验证警报,但是页面上没有显示正确的链接。有人知道我做错了什么吗?

我没有得到任何Javascript错误或警告。

再次编辑最后一个错误是由于我使用的是"textContent"而不是"innerHTML"

现在一切正常!

您不需要表单提交,因为您不需要向服务器发布任何内容,所有工作都由客户端完成。有两种方法可以解决这个问题:

添加'return false'给你的onclick处理程序

<input type="submit" onclick="dogeneratelink(); return false" id="generatelink"  name="generatelink" value="Generate Link" class="button"/>
<input type="submit" onclick="doclear(); return false" id="clear" value="Clear" class="button"/>

将输入类型更改为button

<input type="button" onclick="dogeneratelink()" id="generatelink"  name="generatelink" value="Generate Link" class="button"/>
<input type="button" onclick="doclear()" id="clear" value="Clear" class="button"/>
<form action="" onsubmit="return false;">

<form action="#">替换为<form>以发布回当前页面,虽然这不是一种有效的HTML技术,但它适用于所有浏览器

更改输入中的提交类型。你不需要在其他地方发送信息,然后使用按钮

<button type="button" onclick="something();">Click Me!</button>

或者设置标签样式

<a href="#" class="button" onclick="something();">Click Me!</a>

查看这个工作示例,它比您要做的要简单得多。注意,单击按钮时链接和链接指向的位置都会发生变化。你可以在文本框中添加内容,它会改变链接的href.

http://jsfiddle.net/BpEMA/1/

你自己编写了一些非常复杂的代码。首先,使用jQuery(学习曲线非常小,而收益却是巨大的)。然后,简化你正在做的事情。

最新更新