W3.org验证卡在一个内联javascript属性上,如何解决?

问题描述

| 我有一个网站,其中包含针对特定元素的以下代码
<textarea id=\"textToTranslate\" onfinishinput=\"dothis()\" rows=\"5\"></textarea>
onfinishinput等待用户输入并检查他是否已停止。如果他停止键入,则通过$(\'#waitUserInput \')。live()函数调用函数。 我的问题的棘手部分是,如何将上述行完全更改为jQuery。 jQuery dat对应于dothis()函数,如下所示:
// 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时,出现一个错误,是的,它与上面的代码有关: 此时,元素textarea上不允许使用onfinishinput属性
<textarea id=\"textToTranslate\" onfinishinput=\"dothis()\" rows=\"5\"></textarea>
问题是,是否有可能将onfinishinput javascript属性从textarea中移出,但是功能是否相同? 我知道这有点复杂,但是我希望有人可以提供帮助。     

解决方法

为什么不改变呢?
eval(input_field.attr(\"onfinishinput\"));
至:
dothis();
然后从您的文本区域中删除\'onfinishinput \'属性?     ,TEXTAREA没有称为“ onfinishinput \”的属性,因此验证器是正确的。包含它实际上确实违反了标准。 看来您正在尝试做的是能够为页面上的每个TEXTAREA具有不同的处理程序,以便您可以执行不同的操作。在这种情况下,为什么不让jQuery无条件调用dothis()并将传递事件的控件作为参数传递呢? 然后,您可以根据传递的控件的ID将特定于控件的处理放入dothis()函数中。     ,如何以不同方式绑定事件并删除属性:
$(\'#textToTranslate\').bind(\'onfinishinput\',dothis\');
然后,您需要使用jQuery的触发器来触发事件(请参阅http://api.jquery.com/bind/)