我的网站包含以下特定元素的代码:
<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,但这样功能是否相同?
我知道这有点复杂,但我希望有人可以提供帮助。
答案 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/)