这更多的是关于如何处理这种情况的问题。
我有一个表单,如果任何表单输入包含",我需要执行一个操作。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