0

我有一个包含大约 25 个输入(文本、单选框和复选框)的扩展表单。我希望当我单击打开 jQuery 对话框的按钮时,加载表单并将除其中 5 个之外的所有字段设置为禁用。看起来很简单,但我希望它成为一个“通用”功能。我的意思是,我有这个方法:

function disableInputs(jQueryElement, exceptions, booleanClean) {
    //Some stuff
}

我想从 中获取所有输入jQueryElement,但忽略所有具有 id 的元素exceptionsExceptions是一个像这样的对象:

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

这是我的完整代码,也是我测试过的,但这是使它工作的唯一方法,如果我收到第三个参数 ( booleanClean),它将设置value=''为 all inputs,而不是设置为未排除的元素被禁用。该布尔值用于检查您是否要在调用此函数时清除输入:

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;
                }
            }
        }
    }
}

我知道为什么不使用干净的“选项”。我想要的是我必须把它放在哪里才能正确地做到这一点,或者我是否可以在我获取输入时设置一个条件以仅获取未排除的输入(优选的第二个优化选项并且不为每个输入设置属性和如果被排除在外,请删除它们。似乎更容易工作)。

4

4 回答 4

2

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

var exceptions = ['clientId',
                  'clientName',
                  'clientFirstSurname',
                  'clientSecondSurname',
                  'clientAlias'];

...因为这样您就可以大大简化您的功能

function disableInputs(jQueryElement, exceptions, booleanClean) {
    var inputs = jQueryElement.find('input');
    if (exceptions.length > 0) {
        exceptions = "#" + exceptions.join(",#");
        inputs = inputs.not(exceptions);
    }
    inputs.prop("disabled",true);
    if (booleanClean)
        inputs.val("");
}

对于您是要清除所有输入还是仅清除不在例外列表中的输入,我有点困惑。我上面的代码只是清理那些不在列表中的代码。要将它们全部清理干净,请将其移至if(booleanClean) inputs.val("");另一条if语句之前。

于 2013-05-20T11:07:21.627 回答
1

尝试

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('')
    }
}
于 2013-05-20T11:08:07.580 回答
0

您是否可以为例外项指定类名?这就是我会做的。

<input class="exception" />

$( "input:not(.exception)" ).prop("disabled", true);
于 2013-05-20T11:09:37.033 回答
0

试试这个:

HTML

<form>
    <input type="text" name="input1" value="val1" />
    <input type="text" name="input2" value="val2" />
    <input type="text" name="input3" value="val3" />
</form>

JS

function disableInputs(jQueryElement, exceptions, booleanClean) {

    jQueryElement.find('input').not( exceptions.join(', ') ).each(function(){

        if( booleanClean ){
            $(this).val('');
        }

        $(this).prop('disabled', true);

    });

}


var exceptions = ['input[name=input1]', 'input[name=input3]'];

disableInputs( $('form'), exceptions, true );

这是工作示例:http: //jsfiddle.net/4Dwwk/

于 2013-05-20T11:27:23.347 回答