我有一个大约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;
}
}
}
}
}
我知道为什么不使用干净的“选项”。我想要的是我必须正确地做到这一点,或者当我得到输入时只设置一个条件来获取未排除的输入(优选的第二个选项,而不是为每个输入设置一个属性)如果被排除,请删除它们。似乎更容易工作)。
答案 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/