我有一个javascript函数被input type =“image”标记调用,该标记生成一个url并将其分配给window.location。
问题在于,除非我从函数中返回false,否则我实际上会闯入代码并返回到返回,它将无效。
从字面上看,如果我让代码运行,它会刷新页面但不会重定向到新的url(url已经验证正确)。但是,如果我在windows.location ='url'的javascript中放置一个断点,并跳到“return false;”声明,它会工作。
在NET中的firebug中,当它没有重定向时,它会显示该调用的GET旋转并且永远不会完成。
<input type="image" runat="server" id="btnFind" src="images/search.png" align="top" name="Go" onclick="ValidateAndRedirectSearchResults()"/>
我将runat设置为server,因为我在后面的代码中设置了src以及 CausesValidation属性为false。
有什么建议吗?
function ValidateAndRedirectSearchResults() {
var text = document.getElementById('<%=someTextBox.ClientID %>').value;
var url;
if (ValidateSearchBoxContent(text)) {
var criteria = ConvertStringToAscii(text);
var tempUrl = document.getElementById('<%=tempUrl.ClientID %>').value;
url = tempUrl + encodeURIComponent(criteria)
//if I break here and step to return statement it works
//I have tried window.location.href = url as well
window.location = url;
}
return false;
}
答案 0 :(得分:1)
应该是onclick="return ValidateAndRedirectSearchResults()"
,尽管这是附加事件处理程序的可怕方式。 JavaScript属于.js
个文件,与CSS在.css
个文件
答案 1 :(得分:0)
“图像”输入类似于“提交”输入。这就是为什么返回false
使其工作:它取消了表单提交。
您还可以通过事件本身阻止默认操作。 (事实上,我认为无论如何,返回false
并不一定适用于所有浏览器。)
function ValidateAndRedirectSearchResults(ev) {
ev = ev || window.event;
if (ev.preventDefault)
ev.preventDefault();
else
ev.returnValue = false; // IE
// ...
}
(确保以这样的方式绑定事件处理程序,以确保在有意义的浏览器中将事件作为参数传递。)