为什么JQuery NOT选择器在类型提交时失败,但在类型按钮上有效

Why does JQuery NOT selector failed on Type Submit but works on Type Button

本文关键字:类型 按钮 有效 失败 提交 JQuery NOT 选择器 为什么      更新时间:2023-09-26

我有这个代码,我已经更改和调整了太多次,无法计数,但如果表单按钮是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);

编辑

根据你的评论,我再次回顾了你的问题。这就是正在发生的事情吗:

  1. 输入一个值
  2. 按钮启用
  3. 按下按钮
  4. 页面发布,回发后,按钮被禁用
  5. 您希望在回发后启用该按钮

如果是这样的话,问题是你在页面加载时禁用了按钮,但只在模糊事件中启用它。回发后,模糊不仅会自动发生,而且最简单的解决方案是在禁用按钮后手动触发模糊(如果触发模糊,实际上不需要禁用它):

$(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..
});