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

时间:2011-04-14 16:48:29

标签: javascript jquery

我的网站包含以下特定元素的代码:

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

onfinishinput等待用户输入并检查他是否已停止。如果他停止输入,则通过$('#waitUserInput')。live()函数调用函数dothis。 我的问题的棘手部分是,如何将上面的行改为完全jQuery。

与dothis()函数对应的jQuery dat如下:

// 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,但这样功能是否相同?

我知道这有点复杂,但我希望有人可以提供帮助。

3 个答案:

答案 0 :(得分:2)

为什么不改变:

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

要:

dothis();

然后从textarea中删除'onfinishinput'属性?

答案 1 :(得分:2)

对于TEXTAREA,没有名为'onfinishinput'的属性,因此验证器是正确的。实际上包括它确实违反了标准。

您尝试做的事情似乎是能够为页面上的每个TEXTAREA设置不同的处理程序,以便您可以采取不同的操作。如果是这种情况,为什么不让你的jQuery无条件地调用dothis()并将触发事件的控件作为参数传递?

然后,您可以根据传递的控件的ID在您的dothis()函数中放置特定于控件的处理。

答案 2 :(得分:1)

如何以不同方式绑定事件并删除属性:

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

然后你需要使用jQuery的触发器来触发事件(参见http://api.jquery.com/bind/