Javascript onchange регулярное выражение / символ

0

У меня есть обмен внутри входа. Однако шаблон регулярного выражения создается неправильно.

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 

Обратите внимание, что onchange attr в этом контексте необходимо печально...

  • 0
    Обратите внимание, что атрибут onchange в этом контексте необходим - мне очень трудно в это поверить. В любом случае, вы не должны иметь возможность объявлять такую строку в нескольких строках без ее экранирования. Вы должны были получить синтаксическую ошибку.
  • 2
    Поставьте еще один \ => "\\\ B" вместо "\\ B". Кстати, я бы прикрепил обработчик с помощью метода on()
Показать ещё 1 комментарий
Теги:

3 ответа

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);" );

Демо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню