【问题标题】:jquery form event listenerjquery表单事件监听器
【发布时间】:2026-02-18 01:50:01
【问题描述】:

可以为表单创建一个事件监听器,这样如果没有执行操作(例如从列表中选择任何元素),表单将不会提交,并最终显示警报?

谢谢!

【问题讨论】:

  • 你的意思是说如果用户不改变下拉菜单的默认值,那么就会触发alert
  • 如果表单没有变化,为什么在点击提交按钮后不发出警报?

标签: jquery events forms submit listener


【解决方案1】:

确实有可能。最直接的方法是处理所有元素的change 事件,在那里引发一些全局标志,然后在submit 事件中检查该标志:

$("#Form1 input,textarea,select").each(function() {
    $(this).change(function() {
        window["canSubmit"] = true;
    });
});

$("#Form1").submit(function() {
    if (window["canSubmit"] === true)
        return true;
    alert("Please fill the form");
    return false;
});

现场测试用例:http://jsfiddle.net/Wahr2/

【讨论】:

  • 嗯..非常酷,但我有一个大问题。在我的情况下,可选元素不包含在表单中。重新表述的问题在这里:*.com/questions/5851819/… 谢谢!
  • @dana 所以只需将$("#Form1 input,textarea,select").each(function() { 更改为:$("input,textarea,select").each(function() { 这意味着您将捕捉到任何元素的变化,无论它位于何处。
  • cool...所以没有必要包含在我的表单中。极好的!我现在就试试,告诉你发生了什么:)谢谢!
  • 嗯...问题是我的选择元素有点真实。意思是,我实际上没有输入 html 元素(选择、单选、复选框等),而是一个简单的无序列表。和一个在 li 元素推送上设置一些值的小 javascript。因此,该脚本不适用于 li 元素 :( 代码在第一个评论链接中。
  • @dana 仍然可行。在点击列表项触发的代码中,添加window["canSubmit"] = true即可。
【解决方案2】:

您可以通过单击提交按钮来连接此操作(从列表中选择任何元素)并检查是否选择了任何列表元素,否则会触发警报

$(document).ready(function() 
{
    $('#Submit').click(function(){   
    if (!$("#mySelect option:selected").length)
        alert("Select a value"); 
    });
 });

【讨论】:

  • 我认为 OP 没有提到点击,只是在验证选择选项中的选定值是否为默认值
  • 但我想这必须在表单提交仪式上进行检查..?
【解决方案3】:

这应该可行。 http://jsfiddle.net/eLgEZ/

<form id="form">
    <input type="checkbox" onclick="$('#form').data('valuesChanged',true)"/>
    <input type="submit" value="submit" onclick="if($('#form').data('valuesChanged') == undefined){alert('iiik')}else{alert('ok lets submit')};return false"/>
</form>

但是,您需要为所有表单元素添加一个侦听器,该侦听器在更改时将设置表单数据“valuesChanged”

编辑

请记住删除提交按钮的onclick语句末尾的“return false”。

【讨论】:

  • 如果可选元素在表单之外怎么办:*.com/questions/5851819/…thanky you!
  • 我的解决方案仍然有效,只需尝试将输入复选框移到表单外。
  • 问题是我没有classinc输入。我有一些列表元素和一个允许我选择它们并为它们添加一些操作的 js。我希望我能在这些 li 元素上实际设置这个事件。这可能吗?
  • 在这种情况下,我需要确切地知道 js 做了什么以及如何与 li 元素交互。但是,这超出了这个问题的范围......
  • 完整代码在这里:*.com/questions/5851819/…