2013-07-23 46 views
0

我有一個文本框,我試圖在輸入時觸發一個事件(我的下面的示例只會從輸入中刪除一個逗號,但我確實需要它來做更多的事情)。我的代碼在Firefox和Internet Explorer上效果很好,但是當我點擊進入Chrome中的文本框時,我有大約0.5秒的時間開始輸入,否則我失去了焦點。在我的網站上測試下面的確切代碼會產生錯誤。任何想法?Chrome和輸入事件

<input type="text" id="question" name="question" oninput="clean(this);" /> 

<script type="text/javascript"> 
    function clean(q){ 
     q.value=q.value.replace(",",""); 
    } 
</script> 

感謝所有幫助

+1

我不能用這個jsFiddle重現你的問題:http://jsfiddle.net/qxHW4/ – ComFreek

+1

即將發表評論與@ComFreek相同的東西。 Chrome v28 – RobH

+0

嗯......這很有趣。我想知道我的其他一些JS是否因爲任何原因而干擾。讓我稍微玩一下,我會回到你身邊。 – Michael

回答

1

幸得ComFreek和RobH指點出來,它適用於JS擺弄就好了。我不想先嚐試它,我覺得很愚蠢。原來,頁面上的其他一些Javascript文件導致觸發器中斷。感謝大家的幫助!

+1

當我面對JS/DOM中的一個奇怪問題時,我嘗試隔離導致問題的代碼。如果錯誤消失,那麼可以確定其他代碼引入了這個問題。 +1 btw;) – ComFreek

+0

正在處理它,這讓我等了2天才能接受我自己的答案。 – Michael

0

你可以嘗試設置一個計時器來運行該函數的代碼。

<input type="text" id="question" name="question" oninput="clean(this);" /> 

<script type="text/javascript"> 
    function clean(q){ 
     window.setTimeout(function(){ 
      q.value=q.value.replace(",",""); 
     }, 0); 
    } 
</script> 
0

如果你打算做一些複雜的事情,我建議你使用jQuery,因爲會解決這個跨瀏覽器的錯誤。

,並使用類似:

$('#input-desired').bind('keyup', function() { 
    this.value = this.value.replace(',', ''); 
}); 

如果你想要去的一個簡單的應用程序,你可以試試這個。

<input type="input" id="desired" onkeyup="desiredInputChanges(this);" /> 

在你的JavaScript文件中使用類似:

desiredInputChanges = function (input) { 
    input.value = input.value.replace(',', ''); 
} 

只是注意,不要忘了做一個功能是你的類和保護你的方法:)

+2

-1,因爲如果某人面對特定瀏覽器的問題,您不能簡單地推薦jQuery。這是荒唐的。 jQuery是**不是**萬能藥。另外,爲什麼你使用'$(this).val()'?你可以使用'this.value'。另一種方式是不必要的開銷。改寫爲:'this.value = this.value.replace(',','');' – ComFreek

+0

我沒有那樣做,他指定想要做一些複雜的事情。我從來不會推薦jQuery來處理這樣的事情,但是在他的文本開頭,他告訴我會做更復雜的事情。我完全同意你的看法。 –

+0

我想他想做一些更高級的字符串操作。無論如何,如果你編輯你的答案,以包括一個通用的解決方案(例如*使用鍵盤事件*),併爲了簡化jQuery代碼將是很好的;) – ComFreek

0

嘗試使用<input onkeyup="clean(this)">,它只會在輸入內容後纔會觸發該功能。

http://www.w3schools.com/jsref/event_onkeyup.asp

+0

當我第一次打字的時候,我有和onkeyup相同的問題。一旦我走了,似乎問題就消失了。仍然不理想。 – Michael

+0

奇怪的是,開發人員/調試工具中的任何錯誤或警告? – Pieter