Javascript/jQuery:从表单获取特定元素

Javascript/jQuery:从表单获取特定元素,javascript,jquery,Javascript,Jquery,我有一个扩展表单,大约有25个输入(文本、收音机和复选框)。我希望在单击打开jQuery对话框的按钮时,加载表单并设置除5个字段外的所有字段为禁用状态。看起来很简单,但我想把它变成一个“通用”函数。我的意思是,我有这个方法: function disableInputs(jQueryElement, exceptions, booleanClean) { //Some stuff } 我想从jQueryElement获取所有输入,但忽略ID为异常的所有元素例外是一个类似于以下对象的对象

我有一个扩展表单,大约有25个输入(文本、收音机和复选框)。我希望在单击打开jQuery对话框的按钮时,加载表单并设置除5个字段外的所有字段为禁用状态。看起来很简单,但我想把它变成一个“通用”函数。我的意思是,我有这个方法:

function disableInputs(jQueryElement, exceptions, booleanClean) {
    //Some stuff
}
我想从
jQueryElement
获取所有输入,但忽略ID为
异常的所有元素<代码>例外
是一个类似于以下对象的对象:

var exceptions = {
    0: 'clientId',
    1: 'clientName',
    2: 'clientFirstSurname',
    3: 'clientSecondSurname',
    4: 'clientAlias'
}
这是我的完整代码,也是我已经测试过的,但这是使它工作的唯一方法,如果我收到第三个参数(
booleanClean
),它会将
value='
设置为所有
输入
,而不是设置为未排除禁用的元素。该布尔值用于检查调用此函数时是否要清除输入:

function disableInputs(jQueryElement, exceptions, booleanClean) {
    var inputs = jQueryElement.find('input');
    for (var i = 0; i < inputs.length; i++) {
        inputs[i].setAttribute('disabled', true);
        for (var attr in exceptions) {
            if (inputs[i].getAttribute('id') === exceptions[attr]) {
                inputs[i].removeAttribute('disabled');
            } else {
                if (booleanClean === true) {
                    inputs[i].value = null;
                }
            }
        }
    }
}
函数禁用输入(jQueryElement、异常、booleanClean){
var inputs=jquerylement.find('input');
对于(变量i=0;i

我知道为什么不使用干净的“选项”。我想要的是,我必须把它放在哪里才能正确地执行,或者如果我可以设置一个条件,当我获取输入时,只获取未排除的输入(优选第二个优化选项,不为每个输入设置一个属性,并在排除的情况下删除它们。似乎更容易操作).

我建议将
异常
对象更改为常规数组:

var exceptions = ['clientId',
                  'clientName',
                  'clientFirstSurname',
                  'clientSecondSurname',
                  'clientAlias'];
…因为这样可以大大简化功能:


我有点困惑,你是想清理所有的输入,还是只清理那些不在例外列表中的输入。我上面的代码只是清理那些不在列表中的。要清除它们,请移动
if(booleanClean)inputs.val(“”)
到另一个
if
语句之前。

我建议将
异常
对象更改为常规数组:

var exceptions = ['clientId',
                  'clientName',
                  'clientFirstSurname',
                  'clientSecondSurname',
                  'clientAlias'];
…因为这样可以大大简化功能:

我有点困惑,你是想清理所有的输入,还是只清理那些不在例外列表中的输入。我上面的代码只是清理那些不在列表中的。要清除它们,请移动
if(booleanClean)inputs.val(“”)if
语句之前添加code>。

尝试

function disableInputs(jQueryElement, exceptions, booleanClean) {
    var not = jQuery.map(exceptions, function(item, index){
        return '#' + item;
    }).join(',')
    var inputs = jQueryElement.find(':input').not(not).prop('disabled', true);
    if(booleanClean){
        inputs.val('')
    }
}
试一试


您是否能够为异常项指定类名?这就是我要做的

<input class="exception" />

$( "input:not(.exception)" ).prop("disabled", true);

$(“输入:非(.exception)”).prop(“已禁用”,true);

您是否能够为例外项指定类名?这就是我要做的

<input class="exception" />

$( "input:not(.exception)" ).prop("disabled", true);

$(“输入:非(.exception)”).prop(“已禁用”,true);
试试这个:

var exceptions = {
    0: 'clientId',
    1: 'clientName',
    2: 'clientFirstSurname',
    3: 'clientSecondSurname',
    4: 'clientAlias'
}
HTML

以下是工作示例:

试试这个:

var exceptions = {
    0: 'clientId',
    1: 'clientName',
    2: 'clientFirstSurname',
    3: 'clientSecondSurname',
    4: 'clientAlias'
}
HTML


这是一个工作示例:

为什么
异常
不是数组:
['clientId'、'clientName'、'clientFirstNames'、…]
@nnnnnn好吧,这里使用
数组
对象
也是一样的。不管怎样,它都会起作用的。这不会解决我的问题,但无论如何还是要谢谢你。为什么
异常
不是数组:
['clientId'、'clientName'、'clientfirstnames'、…]
@nnnnnn好吧,这里使用
数组
对象
也是一样的。不管怎样,它都会起作用的。这不会解决我的问题,但还是要谢谢你。非常感谢!这很有效。如果我理解了它的功能,它将从对象
异常
返回名称,名称前带有“#”,当它找到
输入时,将忽略具有该
ID的输入,并将属性禁用添加到其余元素中,对吗?非常感谢!这很有效。如果我理解了它的功能,它将从对象
异常
返回名称,名称前带有“#”,当它找到
输入时,将忽略具有该
ID的输入,并将属性禁用添加到其余元素中,对吗?谢谢您的回答。但我更喜欢@ArunPJohny answer,因为我可以同时使用
对象
数组
来定义我的异常参数。为了回答您的问题,我想“清理”不在
异常列表中的输入+1你是对的,我不应该暗示没有数组就不能简化:正如你所说的,另一个答案是两种情况。尽管如此,在一般意义上,如果对象只有这样的数字属性,数组比对象更有意义。是的,这是真的,但也许有一天,在任何其他项目中,可能会使用名称而不是数字来定义对象属性(以便更好地理解它或类似的东西)。我接受您关于使用数组的建议;)我也尝试过使用数组,但无论如何我都无法让它工作,我被你的答案绊倒了。但我更喜欢@ArunPJohny answer,因为我可以同时使用
对象
数组
来定义我的异常参数。为了回答您的问题,我想“清理”不在
异常列表中的输入+1你是对的,我不应该暗示没有数组就不能简化:正如你所说的,另一个答案是两种情况。尽管如此,在一般意义上,如果对象只有这样的数字属性,数组比对象更有意义。是的,这是真的,但也许有一天,在任何其他项目中,可能会使用名称而不是数字来定义对象属性(以便更好地理解它或类似的东西)。我接受您关于使用数组的建议;)我也尝试过使用数组,但无论如何我都无法让它工作,我已经被绊倒了