2012-11-13 146 views
1

这是一个理论问题名称:什么的jQuery函数不接受函数作为参数

是否有一个通用名称是指所有不接受函数作为一个参数的jQuery函数? 这种指数(),儿童(),高度()...

UPDATE: 如果我知道这个名字,然后我可以做这样一个问题:“我可以通过一个函数来”命名“功能?”

为了让更多的细节,我都试图通过一个函数作为参数传递给jQuery的.index()方法,但它不工作:

textbox.closest('tr').index(function(){var index = $(this);}); 
+2

出于好奇,为什么? –

+1

无参数。这并不是说你的大部分例子都是。他们只是*可以*。 – Archer

+0

@roXon因为那么我可以提出以下问题:我可以将函数传递给“名称”函数吗? – anmarti

回答

1

接受参数可以采取的所有功能,jQuery函数。在JavaScript中,函数是对象,并且jQuery或vanilla JavaScript都是类型安全的。换句话说,只要函数接受参数,它将接受函数作为其参数之一。

Ergo,不接受任何参数的方法是唯一不接受函数的方法。


编辑:

如果你想获得的技术,那么即使不接受任何参数的方法仍然会接受一个函数作为参数。正如JavaScript不是类型安全的,它也没有实际执行关于函数签名的任何规则,即它不检查输入的参数数量是否与所定义的参数数量匹配。这就是为什么你会得到一个“空引用”错误(如果未处理)而不是“无函数[函数名称]采用参数[参数列表]”。这也是为什么你可以传递无限数量的参数给一个函数,即使它只需要一个,两个或者没有。


UPDATE:

至于我的解决方案,以你原来的问题,我想通过添加jQuery是在一个坚实的语言往往会简单地返回null时澄清传递无效参数(但传递不正确数量的参数时不会错误)。 JavaScript在许多情况下都是一样的,但是,正如我所暗示的和常识所规定的那样,不管合法性如何,将过多或太少的论据传递给方法都是无意义的。

关于您的更新和您的意见,我认为您误解了jQuery的.index()方法的基本用法。正确使用时,此方法在元素集合上调用,并具有选择器(或要匹配的元素)作为参数,并返回满足给定选择器的元素的第一个匹配项的索引,或者匹配给定元素。


更新:

从更新的例子,我可以看到,我在想你是误会使用.index()功能一点点正确的。该函数接受一个选择器或一个元素,但是你传递了一个不返回的函数。这里是你需要什么(使用现有的语法):

textbox.closest('tr').index(function(){ return $(this);}); 

或者(更简单):

textbox.closest('tr').index($(this)); 

要添加一些详细信息(也许,更好地回答你最初的问题) ,你也可以做这样的事情:

function getOnlyParagraphElements() { 
    return this.tagName === "p"; 
} 

var collection = $("body").find("*"); 
var firstParaIndex = collection.index(getOnlyParagraphElements); 

这只是一个例子(是的,我知道我可以只使用jQuery来获取文本的段落),但概念是相同的 - 你这是怎么做你自己的选择器。

另请注意,在您的示例中,您总是检查一个项目集合,这意味着您只能得到值0或值-1(如果元素与选择器/传入元素不匹配) 。如果您的目标是获取您调用该方法的元素相对于其兄弟的索引,则只需调用该方法而不提供任何参数。

+0

我试图将参数传递给索引函数并且不起作用:textbox.closest('tr')。index (function(){alert('hello');}); – anmarti

+1

你想做什么? –

+0

你为什么认为这会起作用? jQuery'.index()'方法将选择器(或选择器函数)或元素作为参数。如果你愿意,你可以传递这样的函数,但它不会做任何事情,因为它是错误的函数类型。 –

相关问题