不确定如何执行操作,如果所有的表单输入不包含特定的值



这更多的是关于如何处理这种情况的问题。

我有一个表单,如果任何表单输入包含",我需要执行一个操作。ca","加拿大"或"加拿大",但如果字段不包含这些字符串,我还需要扭转该操作。理想情况下,此操作将在表单完成时触发(如果需要),而不是在单击submit时触发。

我要检查的代码。Ca ", "canada",或"canadian"

var optInFieldIsVisible = false;
var optInField = jQuery( 'input[name*="email"]' );
jQuery("*").find('input').bind('input propertychange', function() {
    if (/.ca$|canada|canadian/i.test( jQuery(this).val() ) ) {
        optInFieldIsVisible = true;
        optInField.closest( '.formField' ).show();
            // show special form field because reference to canada is present
    }
    else {
        if (optInFieldIsVisible == false) {
            optInField.closest( '.formField' ).hide();
            // hide special form field because reference to canada is removed
    }
 });

上面代码的问题是,它没有任何对特殊字段有效的条件,一旦激活它就永远不会重新隐藏。

如果我在else条件下删除"If (optInFieldIsVisible == false)",如果用户在当前选择的输入内工作,该字段将显示和隐藏正确,但是一旦输入下一个输入,它将重新隐藏(因为regex在现在选择的新表单输入中返回false)。

显然标志变量不是解决方案,某种计数器变量我也看不出在这里工作。有人有建议吗?

编辑:查看实时演示http://jsbin.com/toyin/1/edit

我不确定我是否理解正确,但这可能是你想要的:

var optInFieldIsVisible = false;
var optInField = jQuery( 'input[name*="email"]' );
jQuery("*").find('input').bind('input propertychange', function() {
    if (/.ca$|canada|canadian/i.test( jQuery(this).val() && !optInFieldIsVisible ) ) {
        optInFieldIsVisible = true;
        optInField.closest( '.formField' ).show();
            // show special form field because reference to canada is present
    }
    else if (optInFieldIsVisible){
            optInFieldIsVisible = false;
            optInField.closest( '.formField' ).hide();
            // hide special form field because reference to canada is removed
    }
 });

结帐小提琴,这是你想做的事情吗?

var optInFieldIsVisible = false;
var optInField = jQuery( 'input[name*="opt-in"]' );
optInField.closest( 'div.formField' ).hide();
jQuery("*").find('input').bind('input propertychange', function() {
    if (/.ca$|canada|canadian/i.test( jQuery(this).val() ) ) {
        optInFieldIsVisible = true;
        optInField.closest( 'div.formField' ).show();
    }
    else {
        optInFieldIsVisible = false;
        optInField.closest( 'div.formField' ).hide();
    }
 });

这就是我想要解决的问题。增加了一个新功能:

/* clear required field on focusout if triggers are removed from all fields */
jQuery("*").find('input').focusout(function(){
    var eList = []; 
    jQuery("*").find('input').each( function() { 
        if ( /.ca$|canada|canadian/i.test( jQuery(this).val() ) == false ) {
            eList.push(false);
            }
        else {
            eList.push(true);
        }
    })
    if ( jQuery.inArray(true, eList )==-1 ) {
        optInField.closest( '.formField' ).hide();
    }
})

还从我的原始代码中删除了else语句,因为添加了上面的语句后,不再需要它了。见http://jsbin.com/toyin/3/edit

最新更新