将javascript函数转换为jQuery

将javascript函数转换为jQuery,javascript,jquery,Javascript,Jquery,我有一些javascript我想转换成jQuery 我以为这很容易,但看来我错了 代码应该根据输入的文本量调整文本区域的大小 这是我的密码: function haut() { if ($(this).scrollTop() > 0) aug(); } function aug() { var h = parseInt($(this).height()); $(this).height(h + 10); haut(); } function top() { $

我有一些javascript我想转换成jQuery

我以为这很容易,但看来我错了

代码应该根据输入的文本量调整文本区域的大小

这是我的密码:

function haut() {
   if ($(this).scrollTop() > 0) aug();
}
function aug() {
   var h = parseInt($(this).height());
   $(this).height(h + 10);
   haut();
}
function top() {
   $(this).scrollTop(100000);
   haut();
}

$(document).ready( function() {

    $("#txt_test").keyup(function() {
        haut();
    });

    $("#txt_test").focus(function() {
        top();
    });

});
这是原始代码:

function haut(idt) {
   if (document.getElementById(idt).scrollTop > 0) aug(idt);
}
function aug(idt) {
   var h = parseInt(document.getElementById(idt).style.height);
   document.getElementById(idt).style.height = h + 10 +"px";
   haut(idt);
}
function top(idt) {
   document.getElementById(idt).scrollTop = 100000;
   haut(idt);
}

$(document).ready( function() {

    $("#txt_test").keyup(function() {
        haut(this.id);
    });

    $("#txt_test").focus(function() {
        top(this.id);
    });

});
这里有一个JSFIDLE,如果它有帮助的话

您可以在keyup函数{…}中使用$this的原因;这是因为jQuery实现如何调用它。有关手动设置上下文的更多信息,请参见javascript的.call和.apply


在您的代码中,您没有使用haut.call,而是使用haut,这将不会设置此上下文的值。因此,当像$'*'.keyuphaut这样调用haut时,这意味着它与像$'*'.keyupfunction{haut;}一样调用haut时有所不同;。同样的情况也适用于您从haut打来的电话。

请在提问时详细描述您的问题

到目前为止,我发现绑定处理程序的代码是错误的。应该是:

$(document).ready( function() {

    $("#txt_test").keyup(haut);

    $("#txt_test").focus(top);
});
只需将参数发送到aug

你用错了。而是传递元素:

function haut(element) {
   if (element.scrollTop() > 0) aug(element);
}
function aug(element) {
   var h = parseInt(element.height());
   element.height(h + 10);
   haut(element);
}
function top(element) {
   element.scrollTop(100000);
   haut(element);
}

$(document).ready(function() {
    $("#txt_test").keyup(function() {
        haut($(this));
    });

    $("#txt_test").focus(function() {
        top($(this));
    });
});

你正在失去视野。您可以使用:

德米特里的回答我认为最好的

$("#txt_test").keyup(haut);
$("#txt_test").focus(top);
2或者如果你想在回调中做更多的事情,你可以这样做 使用呼叫时:

$("#txt_test").keyup(function()
{
    haut.call(this);
    alert('...');
});
$("#txt_test").focus(function()
{
    top.call(this);
});

那么您到底有什么问题呢?实际上没有理由将您的原始代码升级到jquery。您没有对jquery对象执行DOM对象无法执行的任何操作,您所做的只是使代码复杂化和性能下降
$("#txt_test").keyup(function()
{
    haut.call(this);
    alert('...');
});
$("#txt_test").focus(function()
{
    top.call(this);
});