【问题标题】:How to submit a HTML form without redirecting?如何在不重定向的情况下提交 HTML 表单?
【发布时间】:2023-04-06 17:10:01
【问题描述】:

我正在编写一个使用reactreact-router 进行路由的客户端渲染Web 应用程序。我已经在formreact-bootstrap 中实现了一个带有input 的搜索。

executeSearch(){
    ...
    window.location.href = '/#/search/' + formattedURL
}

let formSettings = {
  onSubmit:this.executeSearch.bind(this),
  id:"xnavbar-form"
}

const searchButton =
<Button
  onClick={this.executeSearch.bind(this)}>
  <Glyphicon glyph="search" />
</Button>

const searchInput =
<form>
  <Input
    type="text"
    ref="searchInput"
    buttonAfter={searchButton}
    placeholder="search"/>
</form>

... Jumping to the render function

<Navbar.Form
    {...formSettings}>
    {searchInput}
</Navbar.Form>

Mozilla Firefox 中执行搜索按预期工作:按回车键并单击searchButton 将我路由到客户端呈现的页面.../#/search/...

Google Chrome 中执行搜索的行为如下:单击searchButton 的工作方式与上面类似(客户端渲染),但按回车键会导致服务器重定向.../?#/search...

我发现它是由表单的submit 属性引起的,如何修改它以在客户端上呈现?

我正在考虑听一个键盘 ascii 代码(回车)来执行搜索,但它似乎有点乱。

【问题讨论】:

  • 如果您只是切换哈希(而不是页面位置和哈希),请尝试更改 location.hash 而不是 href
  • 我确实需要更改路线,因为我使用react-router 作为我的“组件加载器”,它不仅仅是更改哈希。和ajax 有什么关系?我不想向服务器发送请求...
  • 您听说过 AJAX 或 Google 吗?下面还有更多重复的答案...
  • 您听说过客户端渲染吗? AJAX 与它无关。

标签: javascript html forms reactjs react-router


【解决方案1】:

使用event.preventDefault() 停止表单提交的默认行为。

这将阻止浏览器提交您的表单,而是将“路由”逻辑留给您做您想做的事情。

只需在您的 executeSearch 函数中接受该事件即可。

executeSearch(event){
    ...
    event.preventDefault();
    window.location.href = '/#/search/' + formattedURL;
}

【讨论】:

  • 不客气!请注意,这适用于浏览器可以生成的任何事件,而不仅仅是提交表单。
  • 是的,我知道,只是在寻找解决方案时没有想到
猜你喜欢
  • 2021-07-29
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多