为什么JQuery NOT选择器在类型提交时失败,但在类型按钮上有效
Why does JQuery NOT selector failed on Type Submit but works on Type Button
我有这个代码,我已经更改和调整了太多次,无法计数,但如果表单按钮是type="submit"
,它就不起作用,我可以接受,但有原因吗,有人能告诉我为什么吗?如果我将类型更改为type="button"
,那么它就可以工作了。
$(document).ready(function () {
$('#btnSubmit').attr('disabled', true);
$('#myForm :input:not(#btnSubmit)').blur(function () {
if ($('#myField').val() == '') {
$('#btnSubmit').attr('disabled', true);
} else {
$('#btnSubmit').attr('disabled', false);
}
});
});
我有大约25本JQuery书,它们告诉你如何使用Not运算符,但现在它说表单按钮必须有一个类型按钮,而不是提交类型才能工作。
只是想学习。
注意:上面的代码已经更改了很多次,我试图找出原因
<form name="myForm" id="myForm" method="post" action="">
<label for="myField">Name</label>
<input type="text" name="myField" id="myField">
<input type="button" name="btnSubmit" id="btnSubmit" value="Submit">
</form>
更新:
*我遇到的问题是,当我点击按钮时,按钮再次被禁用:有人能向我解释为什么会发生这种情况吗?在我输入一些值并离开该字段后,该按钮将被启用,但是,只要我单击它,它就会被禁用。
但是,如果我将输入类型更改为按钮,则该按钮在单击时不会被禁用。我不知道为什么会发生这种事。这就是为什么我最初认为这是一个错误或某种支持问题。
只是好奇和知识的利益。*
我怀疑您的not语句可能很好。你确定它失败了吗?你调试过了吗?你的问题可能真的在这里:
$('#btnSubmit').attr('disabled', true);
看看jQuery文档.attr()和.prp()。这里应该使用.prop()
,因为如果你不了解它的工作原理,.attr()
通常会给你带来意想不到的结果。
因此,将您的代码更改为使用prop,如果这还不能解决您的问题,请调试您的not选择器。
$('#btnSubmit').prop('disabled', true);
编辑:
根据你的评论,我再次回顾了你的问题。这就是正在发生的事情吗:
- 输入一个值
- 按钮启用
- 按下按钮
- 页面发布,回发后,按钮被禁用
- 您希望在回发后启用该按钮
如果是这样的话,问题是你在页面加载时禁用了按钮,但只在模糊事件中启用它。回发后,模糊不仅会自动发生,而且最简单的解决方案是在禁用按钮后手动触发模糊(如果触发模糊,实际上不需要禁用它):
$(document).ready(function () {
$('#btnSubmit').prop('disabled', true);
$('#myForm :input:not(#btnSubmit)').blur(function () {
if ($('#myField').val() == '') {
$('#btnSubmit').prop('disabled', true);
} else {
$('#btnSubmit').prop('disabled', false);
}
});
$('#myField').blur();
});
您的代码确实有效,在这里:http://jsfiddle.net/AstDerek/s5cyk/
您希望您正在使用的代码会发生什么?
原始答案:
我真的不明白你的代码是做什么的,但你似乎试图用:input
选择器来瞄准button
,所以你的代码不能像你预期的那样工作。也许这个选择器可以完成任务:
$('#myForm :input:not(#btnSubmit), #myForm button:not(#btnSubmit)')
如果只有一个输入字段,那么为什么要使用not选择器。你可以通过它的id来获取它。
$("#myField").blur(function(){
// Do stuff here..
});
如果你想获得除提交按钮之外的所有元素,你可以尝试:
$("#myForm").children("input[type=text]").each(function(){
// Do stuff here..
});
- 输入类型按钮返回历史记录并返回顶部
- 输入类型按钮在按下时更改颜色
- 在 JavaScript 中创建类型按钮的输入
- 禁用回车键输入类型按钮
- 如何从输入类型按钮清除服务器端 html 文件的内容
- 如何使用 jquery 单击输入类型按钮时更改画布背景图像
- 类型=按钮和类型=提交,按回车键
- 如何在 html 中设置输入类型按钮的样式
- 为什么<输入类型=“按钮”>提交表单
- 尝试禁用输入文件类型按钮
- 如果我使用类型 = 按钮,HTML 5 验证就会消失
- 当输入类型文本小于 0 或大于 24 时,如何禁用输入类型按钮
- 当我使用输入类型=“按钮”时,函数运行良好,但当我使用按钮时,它不起作用
- 输入类型按钮,用于将对象置于左、中、右位置
- 输入类型提交与输入类型按钮
- 使用类型按钮javascript提交表单
- 我想更改提交类型按钮的值
- 按钮不't触发相应的动作(标记按钮和输入类型=按钮)
- 如何检查PHP中是否按下了输入类型按钮
- 我想通过输入类型按钮检查表单验证,而不是通过提交,任何人都可以帮助我