【问题标题】:window.location only seems to work if I return false on the function如果我在函数上返回 false,window.location 似乎才有效
【发布时间】:2011-12-21 12:35:46
【问题描述】:

我有一个被输入 type="image" 标记调用的 javascript 函数,该标记生成一个 url 并将其分配给 window.location。

问题是,除非我从函数中返回 false 并且我真的闯入代码并单步执行返回,否则它将不起作用。

从字面上看,如果我让代码运行,它会刷新页面但不会重定向到新的 url(url 已被验证正确)。但是,如果我在 javascript 中的 window.location = 'url' 处放置一个断点,然后单步执行“return false;”声明,它会起作用的。

在 NET 中的 firebug 中,当它不重定向时,它会显示该调用的 GET 旋转并且永远不会完成。

<input type="image" runat="server" id="btnFind" src="images/search.png" align="top" name="Go" onclick="ValidateAndRedirectSearchResults()"/>

我将 runat 设置为服务器,因为我在后面的代码中设置了 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;
    }

【问题讨论】:

  • 可以发一下ValidateAndRedirectSearchResults()的出处吗?或者至少是执行重定向的相关部分?
  • 我已经用我的代码更新了它。
  • 尝试将alert(url); 放在window.location 行之前。确保它得到一个有效格式的 url
  • @Bryan - 我有,我在我的问题中输入了(网址已被验证正确),因为我首先验证了这一点。我可以获取 url 属性值并粘贴到地址中。

标签: javascript asp.net webforms


【解决方案1】:

应该是onclick="return ValidateAndRedirectSearchResults()",尽管这是附加事件处理程序的可怕方式。 JavaScript 属于 .js 文件,就像 CSS 属于 .css 文件一样

【讨论】:

  • 你是对的,除了我正在工作的项目我不能推送像 JQuery 这样的东西并绑定(在本例中为 Click())到控件。
  • @pgtech,你可以随时使用document.getElementById(findButtonId).onclick = function (e) {...code...};
【解决方案2】:

“图像”输入类似于“提交”输入。这就是为什么返回 false 使它起作用的原因:它取消了表单提交。

您还可以通过事件本身阻止默认操作。 (事实上​​,我认为返回false 并不一定适用于所有浏览器。)

function ValidateAndRedirectSearchResults(ev) {
  ev = ev || window.event;
  if (ev.preventDefault)
    ev.preventDefault();
  else
    ev.returnValue = false; // IE

  // ...
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多