我有一些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/
答案 0 :(得分:1)
您可以在$(this)
中使用keyup(function() { ... });
的原因是因为jQuery实现调用了它。有关手动设置上下文(.call
)的详细信息,请参阅javascript的.apply
和this
。
在您的代码中,您没有使用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);
}
答案 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);
});