缩放jQuery函数而不重复代码

col*_*unn 1 html jquery

下面的脚本用于隐藏段落,直到div.form中的所有文本字段都已填写完毕.

就像现在一样,为了揭示这些段落,我必须填写两个表格.我想要的是每个表单独立行事.换句话说,如果您填写第一个表格中的三个输入,则会显示第一个DIV中的段落.

我可以通过复制代码并添加更多类来实现这一点,但这显然不太理想.

HTML

<div class="form one">  
    <input type="text" />
    <input type="text" />
    <input type="text" />
    <p style="display:none">All inputs in this DIV contain text</p> 
</div>

<div class="form two">  
    <input type="text" />
    <input type="text" />
    <input type="text" />
    <p style="display:none">All inputs in this DIV contain text</p> 
</div>
Run Code Online (Sandbox Code Playgroud)

jQuery的

$('.form input').keyup(function() {

    var empty = false;
    $('.form input').each(function() {
        if ($(this).val() == '') {
            empty = true;
        }
    });

    if (empty) {
        $('.form p').css('display', 'none');
    } else {
        $('.form p').css('display', 'block');
    }
});
Run Code Online (Sandbox Code Playgroud)

Jos*_*ber 5

你应该简单地选择inputs和pfrom .form:

$('.form input').keyup(function() {

    var empty = false,
        $form = $(this).parent();

    $form.find('input').each(function() {
        if ($(this).val() == '') {
            empty = true;
            return false; // stops the loop
        }
    });

    if (empty) {
        $form.find('p').css('display', 'none');
    } else {
        $form.find('p').css('display', 'block');
    }
});
Run Code Online (Sandbox Code Playgroud)

这里是小提琴:http://jsfiddle.net/tGBGK/

PS你可以通过缓存选择器进一步优化它.


或者,您可以放弃循环,只使用属性选择器:

$('.form input').keyup(function() {

    var $form = $(this).parent(),
        empty = $form.find('input[value=]').length;

    if (empty) {
        $form.find('p').css('display', 'none');
    } else {
        $form.find('p').css('display', 'block');
    }
});
Run Code Online (Sandbox Code Playgroud)

...这里是小提琴:http://jsfiddle.net/tGBGK/1/


您可以使用三元运算符进一步缩短此时间:

$('.form input').keyup(function() {

    var $form = $(this).parent(),
        empty = $form.find('input[value=]').length;

    $form.find('p').css('display', empty ? 'none' : 'block');
});
Run Code Online (Sandbox Code Playgroud)

...最后,这里是小提琴:http://jsfiddle.net/tGBGK/2/

谢谢@JesseB.

  • @JohnP - 来自文档:`我们可以通过返回false来停止回调函数中的循环.http://api.jquery.com/each/ (2认同)