将javascript函数转换为jQuery

时间:2012-04-02 12:45:32

标签: javascript jquery

我有一些javascript,我想转换为jQuery ...

我觉得这很容易,但看起来我错了!

代码应根据输入的文本量调整textarea的大小。

这是我的代码:

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);
    });

});

这是一个jsfiddle,如果它有帮助...... http://jsfiddle.net/HhRUH/

5 个答案:

答案 0 :(得分:1)

您可以在$(this)中使用keyup(function() { ... });的原因是因为jQuery实现调用了它。有关手动设置上下文(.call)的详细信息,请参阅javascript的.applythis

在您的代码中,您没有使用haut.call(),而是haut(),它们不会设置this上下文。因此,this在调用$('*').keyup(haut)时比在$('*').keyup(function() { haut(); });调用时更像是一种不同的东西。来自aug()的来电haut同样如此。

答案 1 :(得分:1)

请在提问时具体描述您的问题。

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

$(document).ready( function() {

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

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

答案 2 :(得分:0)

只需将参数发送到aug

function haut(idt) {
   if ($(this).scrollTop() > 0) aug(idt);
}

http://jsfiddle.net/HhRUH/1/

答案 3 :(得分:0)

您使用this错误。改为传递元素:

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));
    });
});

答案 4 :(得分:0)

你正在失去范围。您可以使用:

1)德米特里的答案(我认为最好的答案)

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

2)或者如果你想在回调中做更多的事情,你可以做到 使用call():

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