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

时间:2013-05-20 10:58:28

标签: javascript jquery

我有一个大约25个输入(文本,广播和复选框)的扩展形式。我希望当我单击打开jQuery对话框的按钮时,加载表单并设置所有字段,除了其中5个禁用。似乎很容易,但我希望它成为“通用”功能。我的意思是,我有这个方法:

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

我希望从jQueryElement获取所有输入,但忽略具有exceptions的ID的所有元素。 Exceptions是一个像这样的对象:

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

这是我的完整代码以及我测试过的内容,但这是使其正常工作的唯一方法,如果我已收到第三个参数(booleanClean),则会设置value=''所有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 个答案:

答案 0 :(得分:2)

我建议将exceptions对象更改为传统数组:

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

...因为那样你可以简化你的功能 lot:

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语句之前。

答案 1 :(得分: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('')
    }
}

答案 2 :(得分:0)

您是否可以为异常项目提供类名?这就是我要做的。

<input class="exception" />

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

答案 3 :(得分: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/