2011-04-14 3 views
0

私は、特定の要素の次のコードでウェブサイトがあります。W3.orgの検証は、1つのインラインJavaScript属性に固定されています。

<textarea id="textToTranslate" onfinishinput="dothis()" rows="5"></textarea> 

ユーザの入力を待ち、彼が停止しているかどうかを確認onfinishinputを。入力をやめると、関数dothisはthrought $( '#waitUserInput')。live()関数と呼ばれます。 私の質問の難しい部分は、上記の行を完全にjQueryに変更する方法です。

jQueryのdothisにDAT correspont()関数は以下の通りです:

// Detect if user input stops 
$('#waitUserInput').live("keyup", function(e) 
{ 
    startTypingTimer($(e.target)); 
}); 


var typingTimeout; 
function startTypingTimer(input_field) 
{ 
    if (typingTimeout != undefined) 
     clearTimeout(typingTimeout); 
    typingTimeout = setTimeout(function() 
    { 
     eval(input_field.attr("onfinishinput")); 
    } 
    , 250); 
} 

Javascriptのdothis()関数:

function dothis(){ 
    // Ajax call when called 
{ 

さて、私はhttp://validator.w3.orgに行くとき、私は1個のエラーを持っていますそして、それは上記のコードに関するものです: onfinishinput属性は、この時点で要素textareaでは使用できません。

<textarea id="textToTranslate" onfinishinput="dothis()" rows="5"></textarea> 

質問は、である、それはテキストエリアのうちjavascriptの属性onfinishinputをオンにすることが可能であるが、そうそれは同じに機能しているのですか?

私はそれが少し複雑であることを知っていますが、私は誰かが助けることを願っています。

eval(input_field.attr("onfinishinput")); 

を::

+0

属性はどこから来ていますか?つまり、あなたはおそらく$( 'textToTranslate ")bind(' finishinput '、dothis)'を実行することができます。 –

答えて

2

理由だけではなく、変更されませ

dothis(); 

そして、あなたのテキストエリアから 'onfinishinput' 属性を削除しますか? 「と呼ばれるそのような属性がありません

$('#textToTranslate').bind('onfinishinput', dothis'); 

あなたはその後、jQueryのトリガーを使用してイベントをトリガする必要があると思います(http://api.jquery.com/bind/を参照)

1

TEXTAREAのために、バリデーターが正しいようにしてください。それは実際には標準に違反しています。

あなたがしようとしているのは、ページ上の各TEXTAREAに対して異なるハンドラを持つことができるようになっていることです。その場合、jQueryを無条件にdothis()を呼び出して、イベントを発生させたコントロールをパラメータとして渡すだけではどうですか?

次に、渡されたコントロールのIDに基づいて、コントロール固有の処理をdothis()関数に組み込むことができます。

2

onfinishinput:どのように違ったイベントを結合し、属性の削除について

関連する問題