使用 jQuery 替换表单提交上的文本会停留几秒钟,然后消失

Posted

技术标签:

【中文标题】使用 jQuery 替换表单提交上的文本会停留几秒钟,然后消失【英文标题】:Replacing text on form submit using jQuery stays for few seconds and disappears later 【发布时间】:2021-10-04 02:19:47 【问题描述】:

我有一个表单元素和跨度元素如下:

//I have used following jQuery function to replace text in span:

$(document).ready(function () 
  $("#btn").click(function () 
    var new_text = "Sorry, username '" + $("#username").val() + "' is taken already. Try another one. ";
    $("#name").text(new_text);
  );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="#form">
   <input id="username" name="username" type="text">
   <input class="btn btn-primary" value="submit" type="submit" id="btn">
</form>
            
<span id="name"></span>

在提交表单时,我想将文本添加到 ID 为“名称”的跨度中。但是在提交表单时,文本会闪烁几秒钟。

我希望文本出现在页面上,并且我还希望 ?username=name 在表单提交后出现在 url 中,即,我希望表单输入成为 url 的一部分,因为我想尝试 DOM XSS 攻击在我的页面上。我使用烧瓶服务器渲染 html 文件。

谁能告诉我如何在不影响包含表单输入数据的 url 的情况下在页面上制作文本?

【问题讨论】:

【参考方案1】:

文本会闪烁几秒钟,因为单击 .btn 按钮会提交表单,该表单会刷新页面并删除自页面首次加载以来您对 DOM 所做的动态更改。

要保留您对元素文本所做的更新,您只需在 #form 元素的 submit 事件上调用 preventDefault() 以停止提交并防止页面重新加载。

jQuery($ => 
  $("#form").on('submit', e => 
    e.preventDefault();
    var new_text = `Sorry, username '$$("#username").val()' is taken already. Try another one`;
    $('#name').text(new_text);
  );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<form id="form">
  <input id="username" name="username" type="text">
  <input class="btn btn-primary" value="submit" type="submit" id="btn">
</form>

<span id="name"></span>

请注意,从代码的上下文和显示的消息来看,我假设您需要通过向服务器发出 AJAX 请求来扩展逻辑,以检查输入用户名的有效性和可用性。我将把它作为一个练习留给 OP 来完成。

【讨论】:

使用 preventDefault 有助于文本部分,但我的 url 参数现在不包含表单输入。知道如何解决这个问题吗? 那是因为您不再向服务器发送信息。如果您确实想将信息发送到服务器,那么您需要在页面中放置“抱歉,用户名已被使用...”消息,因为它是从 服务器端呈现的,而不是在 javascript 中/jQuery.我还建议您研究一下客户端和服务器端逻辑之间的区别。

以上是关于使用 jQuery 替换表单提交上的文本会停留几秒钟,然后消失的主要内容,如果未能解决你的问题,请参考以下文章

为啥点击 UICollectionViewCell 上的文本会消失?

矩形上的文本会杀死矩形的悬停效果

删除 doOnTextChanged 上的文本会删除我以编程方式设置的编辑文本的特殊格式

当用户滚动 uitableview 时,UITableViewCell 中的文本会被删除

jQuery AJAX 将提交的表单替换为表单(好),但不会再次提交

如何使用 jQuery 对表单提交进行验证