【问题标题】:jquery function not getting called inside of an ajax functionjquery函数没有在ajax函数内部被调用
【发布时间】:2011-11-15 16:15:57
【问题描述】:

所以我尝试禁用一些 <li> 元素上的链接,这些元素已使用 .load() 函数从另一个页面加载,但由于某种原因,我无法影响这些列表项。

var from_post = false; 

$(document).ready(function() {
    //so this is the function that loads in data from another page
    $("#gallery").load('http://localhost/index.php/site/gallerys_avalible/ #gallerys_avalible'), function() {
        console.log('hello');
        // sense there are no other li elliments on the page i thought this
        // would be okay. but this function never gets called, i've moved it
        // all over i just recently attached it to the load function thinking
        // that maybe if the load was not complete it would not run, but i
        // have had no luck.
        $('li').click(function (e) {
            e.preventDefault();
            console.log("I have been clicked!");
            return false;
        });
    };


    $('#addNew').click(function () {
        console.log('i got called');
        $('#new_form').fadeIn(1000); 
    });

    $('form').submit(function() {

        if(from_post) {

           //submit form
            return true; 

        } else {

            //dont submit form. 
            return false; 

        }
    });

任何帮助将不胜感激,哦,另一件事是我可以通过 firebug 运行此功能,并且可以 100% 正常工作。所以我很难过。

【问题讨论】:

  • 你所拥有的看起来很合理,但我在你的代码中没有看到关于禁用链接的任何内容
  • 有人刚刚回答了我的问题 .live() 有效。 :) 但他们出于某种原因删除了答案。但感谢大家的帮助。
  • 他试图阻止默认点击事件。
  • 是的,这是我的答案,我在再次查看您的代码后删除了...

标签: javascript jquery ajax function jquery-selectors


【解决方案1】:

您过早结束对.load() 的呼叫。你有:

$("#gallery").load('http://...'), function() {

这只是调用 load 然后声明一个函数。但是,该函数未绑定到 success 处理程序,并且永远不会执行。您需要将 ) 放在函数声明的另一侧,以便将该函数作为参数包含在您的 load 调用中:

$("#gallery").load('http://...', function() {
    ...
});

修复这个问题,您的代码就可以工作了:http://jsfiddle.net/gilly3/WdqDY/

【讨论】:

  • 真的,这就是问题的答案。虽然所有其他答案都有效,但发帖者的问题不需要现场或授权。他应该能够直接在回调中绑定事件。这完全是关于如何绑定您的事件的另一场辩论。
  • 哦,原来如此我的想法是正确的,然后你不需要.live?非常感谢您的时间。这很有帮助。
  • @AlexWHB - 不。如果您稍后将有更多列表项添加到页面中并且您希望也具有相同的点击处理程序,则只需要.live()
  • @Alex 这个答案确实是正确的。我会接受这个答案而不是我的答案。
【解决方案2】:

尝试像 live 或 delegate 这样面向未来的事件观察者:

$('li').live('click', function(){})

或者,如果您知道父母,则首选此方法:

$('#gallery').delegate('li','click',function(){})

需要这样做的原因是您的点击事件被绑定到绑定时页面上的元素。稍后添加的任何 li 都不会看到 live 或 delegate 工作方式的绑定。它们绑定到父节点并遍历每个(在本例中为单击)事件的子节点,以查看该事件是否适用于现有子节点。

【讨论】:

  • 很高兴您有时间回答,如果您能解释一下原因会更好。
  • 非常感谢您抽出时间并愿意回答我的问题。当谈到 Jquery 时,我仍然是一个菜鸟。 :)
【解决方案3】:

使用.live('click', ...).delegate() 代替.click(...)

【讨论】:

  • 效果很好,非常感谢!如果您不介意,我还有另一个问题,因为我在 jquery 或 java 脚本方面有点菜鸟,我更像是一个 php 开发人员。我的问题是有一种方法可以制作一个切换功能,首先只切换一个 CSS 样式元素,例如背景颜色或类似的东西。并且选择一个id而不是一个类,因为我知道toggleClass,但我只是想知道是否可以用ids代替?
猜你喜欢
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多