2013-03-18 182 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不要使用硬編碼值,請使用正則表達式,而不是在這裏找到的信息:

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

+0

你是對的!非常感謝提示。現在工作。 – user2123738 2013-03-18 22:29:45

+0

@ user2123738沒問題,如果你總是得到奇怪的字符比較,總是檢查你的編碼;) – Pebbl 2013-03-18 22:32:33

2

你應該換你在準備好事件代碼:

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

我試過了,但問題繼續 – user2123738 2013-03-18 22:16:39

+0

我假設文件是否包含正確,正確?如果你在代碼中添加了一個'alert(「here」)'你真的看到了嗎? – hexblot 2013-03-18 22:18:51

+0

是的,我添加了:alert(「here」);在obj.value = nova.toUpperCase();並出現框... 也,大寫工作的權利... – user2123738 2013-03-18 22:22:36