2009-09-30 84 views
1

我有一个使用jQuery的$ .ajax检索数据的灯箱。将点击事件绑定到jQuery附加链接

如果我找回没有数据,那么我会追加一个“找不到数据”的消息到我的列表中,以及一个链接来重置搜索参数。基本上我试图添加一个.click()事件到我已经添加的链接。

问题是该函数正在立即运行,而不是等待点击事件。

因此,当我执行此操作时,短暂出现“找不到数据”消息,然后将其替换为默认结果。

function getImages(/* parameters ... */) { 
    // other code... 
    // if no results: 
    $('div#imageLightBox ul.thumbList').append('<li>Sorry, no images found. <a href="#" id="clearSearchLink">Clear search</a>.</li>'); 
    $('a#clearSearchLink').click(new function() { 
     alert("clearSearchLink"); 
     // code that resets the search parameters ... 
     getImages('', '', $('#lightBoxPageSize').val(), 1); // <-- calls the function that contains this code. 
    }); 
}; 
+0

此外,我尝试使用.live事件处理程序,而不是在添加链接之前对其进行定义 - 发生完全相同的事情,在按钮被点击之前执行的代码。 – Joel 2009-09-30 22:08:20

回答

3

点击(新功能(){

只是 '功能'

这是一个function expression,不是构造; '新功能()' 与大写F是明确的constructor version,你通常不希望使用它,因为它需要和每次调用都会评估一个字符串参数,这非常糟糕(并且速度较慢)。发生了什么是函数表达式正在创建一个新函数,然后'新'运算符正在用一个新创建的对象调用它作为this(这实际上是new)。

+0

一个匿名函数表达式? – 2009-09-30 22:16:12

+0

确实。匿名函数表达式在jQuery风格中被代码使用了很多。 – bobince 2009-09-30 22:17:41

+0

你是对的,我不知道为什么我没有看到!漫长的一天,我猜。谢谢。 – Joel 2009-09-30 23:04:39