2013-03-18 2 views
0

У меня есть функция для замены в текстовом поле специальных символов и изменения всего текста на верхний регистр. Если добавить функцию непосредственно внутри <script> тега:Функция Javascript для удаления специальных символов

<script language="JavaScript" type="text/javascript"> 
function ... 
<script/> 

скрипт работает, как ожидалось.

Если бы я включил его в качестве внешнего файла:

<script type="text/javascript" src="<?php echo $dir_js; ?>/plugins/replace.js"></script> 

только меняющегося в верхний регистр работ, специальные символы не удаляются.

Любая помощь? Что не так?

function retiraAcento(palavra,obj) 
{ 
    com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ'; 
    sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC'; 
    nova=''; 
    for(i=0;i<palavra.length;i++) { 
    if (com_acento.search(palavra.substr(i,1))>=0) { 
     nova+=sem_acento.substr(com_acento.search(palavra.substr(i,1)),1); 
    } 
    else { 
     nova+=palavra.substr(i,1); 
    } 
    } 
    obj.value = nova.toUpperCase(); 
} 

$(":input").live('blur', function() { 
    retiraAcento(this.value, this); 
}); 

ответ

1

Мое предположение было бы, что внешний файл не то же самое кодирование в качестве основного файла. Вы должны убедиться, что оба файла имеют кодировку UTF-8, плюс вы также должны убедиться, что любой сервер, который вы используете, служит для файлов с нужным типом контента.

Если файлы имеют кодировку это вызовет проблемы, которые вы испытываете, из-за того, что á напечатанным в вашем входе не будет соответствовать á в вашем файл JavaScript — и поэтому не мог быть найден и удален.

Другой способ обойти это было бы не использовать жестко закодированные значения во внешнем JavaScript, проверьте с помощью RegExp, а и информация здесь:

http://www.regular-expressions.info/unicode.html#grapheme

+0

вы правы! Большое спасибо за подсказку. Работаю сейчас. – user2123738

+0

@ user2123738 проблем нет, если вы когда-либо получаете странные сравнения символов, всегда проверяйте свою кодировку;) – Pebbl

2

Вы должны обернуть свой код на готовый событие:

$(document).ready(function() { 
    $(":input").live('blur', function() { 
    retiraAcento(this.value, this); 
    }); 
}); 
+0

Я пробовал, но проблема по-прежнему – user2123738

+0

я полагаю, что файл включен правильно, правильно? Если вы добавите 'alert (« here »)' в код, который вы действительно видите? – hexblot

+0

Да, я добавил: alert ("here"); ниже obj.value = nova.toUpperCase(); и коробка появляется ... тоже, заглавный работа правый ... – user2123738