jquery - 禁用表单中的所有输入:not(this)

时间:2017-11-01 16:40:44

标签: jquery jquery-selectors

不确定这是否可行或我只是没有正确地写它:

}).on("change", function (e) {
    $("#searchForm:not('#locationName') :input").prop("disabled", true);
});

#searchForm是整个表单的ID

#locationName是我想要排除的特定输入的ID(不仅仅是这个,但这只是一个例子)

我想要排除多个输入ID以及表单中的大量列表,所以我不希望逐个禁用它们...我想尽可能使用not()选择器

我已经尝试了几种不同的方式来编写它,但似乎无法使其正常工作。

2 个答案:

答案 0 :(得分:3)

  

#searchForm是整个表单的ID

     

#locationName是我要排除的特定输入的ID

在这种情况下,:not应位于:input,而不是#searchForm

.on("change", function (e) {
  $("#searchForm :input:not('#locationName')").prop("disabled", true);
});

答案 1 :(得分:2)

您当前的代码在#searchForm元素中查找也不是#locationName元素的输入。由于元素只能有一个ID,因此没有意义。您正在将:not应用于错误的元素。

您的意思是将:not放在:input伪类上。

$("#searchForm :input:not(#locationName)").prop("disabled", true);

另请注意,:not中的seletor周围不需要引号。

如果要排除多个元素,请记住在构建复合选择器时,它是AND,因此请使用多个:not s:

$("#searchForm :input:not(#locationName):not(#somethingElse)").prop("disabled", true);

实际上,说过,我从the jQuery documentation看到他们扩展:not以允许群组选择器:

// Only valid with jQuery
$("#searchForm :input:not(#locationName, #somethingElse)").prop("disabled", true);

not valid in CSS只允许simple selectors,这是一个jQuery扩展(如:input)。通过使用jQuery扩展,您可以强制jQuery使用其Sizzle引擎处理选择器本身,而不是将浏览器转移到显着更高效的内置引擎,但在大多数情况下,速度的差异并不重要。

或者,您可以使用.not function

// Only valid with jQuery
$("#searchForm :input").not("#locationName, #somethingElse").prop("disabled", true);