问题描述
|
我有一个网站,其中包含针对特定元素的以下代码:
<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/)