2013-12-19 40 views
0

我有一个输入内的onchange。然而,正则表达式模式没有得到正确创建。Javascript onchange正则表达式/字符

jQuery(this).attr("onchange", " 
var cat = jQuery('.coverage'); 
var dog = 0; 
for(var i = 0; i < cat.length; i++){ 
if(cat[i].value){ 
    dog = parseInt(cat[i].value.replace(/\,/g,''), 10) + dog; 
} 
} 
var pat = new RegExp('\\B(?=(\d{3})+(?!\d))' , 'g'); 
jQuery('#total').val(dog); "); 

的模式,而不是:

/\B(?=(d{3})+(?!d))/g 

出来:

/B(?=(d{3})+(?!d))/g 

注意,在此背景下,平变化attr为必要的黯然......

+0

*请注意在这方面的onchange attr是必要的* - 我觉得很难相信。无论如何,你不应该能够在不转义的情况下在多行上声明这样的字符串。你应该有一个语法错误。 – CodingIntrigue

+2

放一个\ =>“\\\ B”而不是“\\ B”顺便说一句,我会通过'“\ d”'方法 – Stphane

+1

用'on()方法附加处理程序“,您的意思是”d“或数字类'\ d'('[1-9]')? 在第二种情况下,您必须加倍斜线:'\\ d'。 – kelvinss

回答

1

那么如果onchange属性是绝对必要(我真的不明白为什么它会),你仍然可以封装整个逻辑函数和内联函数使用它(它仍然比一个巨大的更优雅串)。

//must be global, strongly consider namespacing 
function onChange(e) { 
    //do something 

    //also all \ must be escaped in a string to put an actual \ 
    var pat = new RegExp('\\B(?=(\\d{3})+(?!\\d))', 'g'); 

    //but your pattern is not even dynamic so you should use a 
    //regex literal instead of the RegExp constructor. 

    pat = /\B(?=(\d{3})+(?!\d))/g; 
} 

jQuery(this).attr("onchange", "onChange(event);"); 

但是我真的不明白为什么on就不会在这里工作?

0

你必须使用一个真正的函数,而不是onchange字符串属性,我已经改变了

var pat = new RegExp('\\B(?=(\d{3})+(?!\d))' , 'g');

var pat = new RegExp('\\\B(?=(\d{3})+(?!\d))' , 'g');

检查了这一点它应该工作:

jQuery(this).change(function(){ 
    var cat = jQuery('.coverage'); 
    var dog = 0; 
    for(var i = 0; i < cat.length; i++){ 
     if(cat[i].value){ 
     dog = parseInt(cat[i].value.replace(/\,/g,''), 10) + dog; 
     } 
    } 
    var pat = new RegExp('\\\B(?=(\d{3})+(?!\d))' , 'g'); 
    jQuery('#tivcalc').val(dog); 
}); 
0

要继续使用attr你可以这样做:

function run_onchange(e, elem){ 
    var cat = jQuery('.coverage'); 
    var dog = 0; 
    for(var i = 0; i < cat.length; i++){ 
     if(cat[i].value){ 
      dog = parseInt(cat[i].value.replace(/\,/g,''), 10) + dog; 
     } 
    } 
    var pat = new RegExp('\\B(?=(\d{3})+(?!\d))' , 'g'); 
    jQuery('#total').val(dog); 
} 

jQuery(this).attr("onchange", "run_onchange(event,this);"); 

Demo