1

有没有办法为多个字段循环 JavaScript 函数?

例如,我有 5 个文本框,例如:

text1
text2
text3
text4
text5

现在,他们每个人都在“focusout”上做同样的事情,因此我不想为他们每个人编写五个不同的 JS 函数:

$('#text1').focusout( {
.............
    });

$('#text2').focusout( {
.............
    });

$('#text3').focusout( {
.............
    });

$('#text4').focusout( {
.............
    });

$('#text5').focusout( {
.............
    });

我怎样才能避免在这里写五个不同的函数?

提前致谢

4

5 回答 5

1

使用通用类:

<input type="text" class="focusClass" />
<input type="text" class="focusClass" />

这个JS:

$('.focusClass').focusout(function() {
    // ...
});

其他选择是将它们连接在一起,但这种方式更难维护:

$('#text1, #text2, #text3, #text4, #text5 ').focusout(function() {
    // ...
});
于 2012-07-12T18:28:34.183 回答
0

您可以将文本框的 ID 传递给 jQuery 函数来执行您的任务。

尝试这个:

function myFunction(IDofObject)
{
    $( "#"  + IDofObject  ).doSomething();
}
于 2012-07-12T18:38:33.340 回答
0

在您的选择器中,选择您要使用的所有元素:

$('#text1, #text2, #text3, #text4, #text5')
于 2012-07-12T18:28:48.413 回答
0

如果在所有元素上放置同一个类没有意义,您可以将选择器与逗号组合:

$('#text1, #text2, etc...., #text5').focusout( {
.............
});

或者,您可以声明该函数,然后通过 focusout 调用将其作为参数传递给每个选择器:

var onFocusOut = function() {
 do something
};

$('#text1').focusout(onFocusOut);
$('#text2').focusout(onFocusOut);
$('#text3').focusout(onFocusOut);
$('#text4').focusout(onFocusOut);
$('#text5').focusout(onFocusOut);
于 2012-07-12T18:30:25.153 回答
0

好吧,这是一个简短的方法......

$("#text" + [1,2,3,4,5].join(", #text")).focusout(function () {...});

但我想知道您是否不能向元素添加一个类,以便您可以一次选择它们。

例如...

<input type='text' id="text1' class='textfield' />
<input type='text' id="text2' class='textfield' />
<input type='text' id="text3' class='textfield' />

然后使用以下选择器...

$(".textfield").focusout(function () {...});

其他选项是您有一个带有 id 的父容器,它为您提供以下选项...

<div id="formfields">
    <input type='text' id="text1' class='textfield' />
    <input type='text' id="text2' class='textfield' />
    <input type='text' id="text3' class='textfield' />
</div>

然后选择器看起来像这样......

$("#formfields input[type=text]").focusout(function () {...});

更新添加了另外两个选项来选择您的字段

于 2012-07-12T18:33:28.113 回答