如果我在函数上返回false,window.location似乎只能工作

时间:2011-11-03 20:17:06

标签: javascript asp.net webforms

我有一个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;
    }

2 个答案:

答案 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

  // ...
}

(确保以这样的方式绑定事件处理程序,以确保在有意义的浏览器中将事件作为参数传递。)