我创建了以下功能。
function showAllSelectOpts(select)
{
selectLength = select.children().length;
select.attr('size',selectLength);
select.css('height','auto');
select.focusout(function(){
select.attr('size','1');
});
}
当直接在像这个showAllSelectOpts(mySelect);
这样的select元素上调用它时它可以正常工作,但是当在另一个函数中调用时,如下所示使用关键字“this”,它会返回错误。 类型错误:select.children不是函数
$('select').on('focus',function(){
showAllSelectOpts(this);
})
这是范围问题还是什么,我该如何解决?
答案 0 :(得分:4)
在事件处理程序中,this
是对DOM元素的引用,而不是jQuery对象。但是你的showAllSelectOpts
期望它的参数是一个jQuery对象。
更改调用以使用$()
包装DOM元素:
showAllSelectOpts($(this));
... 或更新showAllSelectOpts
本身就是这样做的:
function showAllSelectOpts(select)
{
select = $(select); // ***
selectLength = select.children().length;
select.attr('size',selectLength);
select.css('height','auto');
select.focusout(function(){
select.attr('size','1');
});
}
旁注:作为A.Wolff points out,您的函数会在每次调用选项时附加新 focusout
处理程序。您只需要一个。
我会完全删除处理程序的那一部分,并用一个focusout
替换它:
function showAllSelectOpts(select)
{
var selectLength = select.children().length;
select.attr('size',selectLength);
select.css('height','auto');
}
$('select')
.on('focus',function(){
showAllSelectOpts($(this));
})
.on('focusout', function(){
$(this).attr('size', '1');
});
另请注意,我在var
中为selectLength
添加了showAllSelectOpts
(实际上,您可以完全删除变量);如果没有一个,代码就会成为The Horror of Implicit Globals 的牺牲品(这是我贫血的小博客上的帖子)。请务必声明您的变量。
答案 1 :(得分:1)
jQuery事件监听器回调将this
设置为触发事件的HTMLElement。
在你的回调中,你期待一个jQuery对象,但你有HTMLElement。
您可以将HTMLElement传递给jQuery构造函数并将其传递给showAllSelectOpts
函数
$('select').on('focus',function(){
showAllSelectOpts($(this));
})
答案 2 :(得分:0)
试试这个:
var myselect = $('select');
$('select').on('focus',function(){
showAllSelectOpts(myselect);
})
更好的方法可能是:
$('select').on('focus',function(event){
showAllSelectOpts($(event.target));
})
为什么您的代码无效?
$('select').on('focus',function(){
//Here `this` is bound with the dom html element, not the $('select') object.
showAllSelectOpts(this);
})
答案 3 :(得分:0)
试试这个 -
$('select').on('focus',function() {
showAllSelectOpts($(this)); })
答案 4 :(得分:0)
以前的答案解决了这个问题。我只是在这里添加创建它作为扩展,因为private void button1_Click(object sender, EventArgs e)
{
if (dbcontext != null)
dbcontext.Dispose();
dbcontext = new mcshonsey_FinalProject.UserShowDBEntities();
dbcontext.UserTables
.OrderBy(entry => entry.UserID)
.Load();
if (string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox2.Text))
{
MessageBox.Show("You must enter a password or username", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBox1.Focus();
}
/*else
{
ShowSelectForm ssf = new ShowSelectForm(this, sort);
Hide();
ssf.Show();
}*/
var user =
from use in dbcontext.UserTables
where use.UserName == textBox1.Text && use.Password == textBox2.Text
select use;
if (Enumerable.Count(user) > 0)
{
ShowSelectForm ssf = new ShowSelectForm(this, sort);
Hide();
ssf.Show();
}
else
{
MessageBox.Show("Incorrect username and/or password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBox1.Focus();
}
}
指的是一个方法调用的原型。
$(this)