我正在尝试对用户点击执行输入验证。但是jQuery click()函数的工作不一致;有时它的行为就像我期望的那样,有时点击链接除了将视口移动到屏幕顶部之外什么都不做。问题是我无法一致地复制错误;有时它有效,有时则不然。我已经在Windows XP的Firefox和Mac的Chrome 9.0上重现了它,但是,有时页面会起作用,有时它不会。有一次加载不正确我尝试清除缓存,再次加载页面,页面仍然没有加载。它似乎从未加载到加载,特别是在对文件进行大量更改后。
我在这里设置了一个简化的测试用例:http://kburke.org/thesis/consentform1.php。如果表单正常工作,它应显示一个警告框。这是代码:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#submitlink").click(function(){
console.log("link clicked");
alert("Clicked!");
});
console.log("loading...");
});
</script>
</head>
<body style="width:35em; margin-bottom:200px;">
<input type="text" value="" name="part_name" id="name1" />
<input type="text" value="" name = "part_name2" id="name2" />
<input type="checkbox" name="accept_1" id="accept_1" />I signify my agreement that all matters and issues mentioned above have been discussed to my satisfaction and agreement. <br><br>
<input type="checkbox" name="accept_2" id="accept_2" />I acknowledge that I am 18 years of age or older on the date of signing this consent, and that I have read and understood all of the above.</p>
<div id="submitlink" style="float:right; color:blue; text-decoration:underline; cursor:pointer;">I agree</div>
<form method="post" id="agree" action="/thesis/instructions.php">
<input type="hidden" name="id" id="nextpage" value="">
<input type="hidden" name="name" id="the_name" value="" />
</form>
</body>
</html>
感谢您提供的任何见解,尤其令我感到困惑的是行为不一致。
修改:有人建议console.log
导致问题,但删除控制台语句后我仍然遇到问题。运行Chrome的JS调试器表明,当问题发生时,$("#submitlink")
调用中的代码根本没有运行。像往常一样,我感谢你的帮助。
答案 0 :(得分:3)
我注意到您的代码中有一些console.log()
语句。我还注意到,当我打开Firebug时,你的代码工作正常。当我关闭Firebug时,代码无效。
console
对象不是JavaScript本身的一部分;它是由Firebug(以及许多其他调试工具)创建的,用于替换批量alert
调试方法。当Firebug关闭时,console.log()
行会产生致命错误,从而阻止JavaScript执行。
答案 1 :(得分:1)
我解决了这个问题。 Google Voice Chrome Extension正在添加指向页面上电话号码的链接,这会干扰jQuery操作。重大测试,删除页面上的元素和禁用Chrome扩展程序都验证了扩展程序导致了问题。
下次我会尝试记住禁用所有扩展程序以查看是否导致问题。
我在此处提交了错误报告:http://code.google.com/p/chromium/issues/detail?id=64019
答案 2 :(得分:0)
删除console.log,因为console.log不会始终可用