Javascript 为什么$.change()会在提交按钮上触发?

Javascript 为什么$.change()会在提交按钮上触发?,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我有一个$.change()事件,但当按下提交按钮时,更改事件再次触发。当一个文本被输入到一个输入文本框中时,它应该只触发一次 $('input:submit', top.document).bind('click', function (e) { alert("submitting") }); $('input').change(function (e) { alert("fire"); }); 编辑:无论出于何种原因,单击输入按钮时都会调用更改事件。(谢谢安东尼) 解决这

我有一个
$.change()
事件,但当按下提交按钮时,更改事件再次触发。当一个文本被输入到一个输入文本框中时,它应该只触发一次

$('input:submit', top.document).bind('click', function (e) {
    alert("submitting")
});

$('input').change(function (e) {
    alert("fire");
});

编辑:无论出于何种原因,单击输入按钮时都会调用更改事件。(谢谢安东尼)

解决这个问题的方法就是不要选择submit按钮

你可以试试

$('input:text')
仅选择文本字段

或者你可以

$('input:not(:submit)')
选择除提交按钮外的所有输入元素


编辑:改用
不起作用。它仍然算作一个
输入
字段,但它的值与按钮上显示的文本是分开的。

编辑:无论出于何种原因,单击输入按钮时都会调用更改事件。(谢谢安东尼)

解决这个问题的方法就是不要选择submit按钮

你可以试试

$('input:text')
仅选择文本字段

或者你可以

$('input:not(:submit)')
选择除提交按钮外的所有输入元素

编辑:改用
不起作用。它仍然算作一个
输入
字段,但它的值与按钮上显示的文本是分开的。

$('input')。更改(函数(e){alert(“fire”)})将该事件应用于所有输入元素,包括
。如果您确实希望每个文本输入元素都有一个更改事件,那么您需要`$('input[type=text]').change(function(e){alert(“fire”)};`否则,最好使用id或类。

$('input').change(函数(e){alert(“fire”)})将该事件应用于所有输入元素,包括
。如果您确实希望每个文本输入元素都有一个更改事件,那么您需要`$('input[type=text]').change(function(e){alert(“fire”)};`否则,最好使用id或类。

@Mark

你说得对,如果我能帮忙的话,我会编辑你的。也许不久的某一天

@阿霍维

提交按钮是输入。至少其中大多数是:

  <input type="submit" />
@马克

你说得对,如果我能帮忙的话,我会编辑你的。也许不久的某一天

@阿霍维

提交按钮是输入。至少其中大多数是:

  <input type="submit" />

这实际上是行不通的,空格的意思是“后代”。因此,您的选择器正在查找另一个输入的后代文本输入,这不太可能工作。去掉空间,一切都好。我犹豫了。我想我以前在这方面遇到过问题,所以我很紧张,因为我认为空间会覆盖这两个方面。谢谢你的提醒。是的,但即使这样…我仍然不明白为什么它选择所有的输入。尽管我明确指定不选择:submit和only:text,但在您提供的代码中,您并没有只指定text。您可以指定在其他地方选择,但这不同。这不仅不能消除普通输入选择器中的提交,还必须记住还有复选框、重置和无线电输入。所以你每次都必须明确,这实际上是行不通的,空格的意思是“后代”。因此,您的选择器正在查找另一个输入的后代文本输入,这不太可能工作。去掉空间,一切都好。我犹豫了。我想我以前在这方面遇到过问题,所以我很紧张,因为我认为空间会覆盖这两个方面。谢谢你的提醒。是的,但即使这样…我仍然不明白为什么它选择所有的输入。尽管我明确指定不选择:submit和only:text,但在您提供的代码中,您并没有只指定text。您可以指定在其他地方选择,但这不同。这不仅不能消除普通输入选择器中的提交,还必须记住还有复选框、重置和无线电输入。所以你每次都得说得具体点。是的,这似乎不起作用。我编辑了上面的代码以提供更多信息。是的,它似乎不起作用。我编辑了上面的代码以提供更多信息。