2012-04-02 120 views
-1

我有一些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/

+2

你到底有什麼問題? – 2012-04-02 12:47:37

+1

真的沒有理由將原始代碼升級到jquery。你沒有對jQuery對象做任何事情,這些對象不能用DOM對象完成,你所做的只是使代碼複雜化並且性能下降 – jbabey 2012-04-02 12:57:52

回答

1

請您在提問時特別說明您的問題。

到目前爲止,我看到你有綁定處理程序的錯誤代碼。它應該是:

$(document).ready(function() { 

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

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

您可以在keyup(function() { ... });使用$(this)原因是因爲它是如何被jQuery實現調用的。有關手動設置上下文(this)的更多信息,請參閱javascript的.call.apply

在您的代碼中,您沒有使用haut.call(),而是haut(),它不會設置this上下文。因此,this意味着在調用類似$('*').keyup(haut)時的內容與調用類似$('*').keyup(function() { haut(); });時的內容不同。從haut呼叫aug()也是如此。

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

你正在失去範圍。您可以使用:

1)梅德的答案(我認爲最好的一個)

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

2),或者如果你想要做更多的事情。回調,您可以使用呼叫做 ():

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