3

遇到一些 jquery 和 ajax 的问题。基本上用户通过ajax形式登录。该表单位于 jquery onclick 下拉菜单中,该菜单也用于购物车菜单(只是更改了命名代码(css + jquery),因此不会相互冲突,并且两者都可以正常工作,直到用户登录(通过 ajax))。

这是下面的jquery代码

//////Cart App
jQuery(".dropdown-cart dt a").click(function() {
        // Change the behaviour of onclick states for links within the menu.
    var toggleId = "#" + this.id.replace(/^link/,"ul");

        // Hides all other menus depending on JQuery id assigned to them
    jQuery(".dropdown-cart dd ul").not(toggleId).hide();

        //Only toggles the menu we want since the menu could be showing and we want to hide it.
    jQuery(toggleId).toggle();

        //Change the css class on the menu header to show the selected class.
    if(jQuery(toggleId).css("display") == "none"){
        jQuery(this).removeClass("selected");
    }else{
        jQuery(this).addClass("selected");
    }
});

jQuery(".dropdown-cart dd ul li a").click(function() {

    // This is the default behaviour for all links within the menus
    var text = jQuery(this).html();
    jQuery(".dropdown-cart dt a span").html(text);
    jQuery(".dropdown-cart dd ul").hide();

});

jQuery(document).bind('click', function(e) {

    // Lets hide the menu when the page is clicked anywhere but the menu.
    var $clicked = jQuery(e.target);
    if (! $clicked.parents().hasClass("dropdown-cart")){
        jQuery(".dropdown-cart dd ul").hide();
            jQuery(".dropdown-cart dt a").removeClass("selected");
        }

});

我已经尝试了一些 .live 组合,甚至 .delgate 但在用户登录后仍然登录和购物车 onclick 菜单在页面刷新之前不起作用

有任何想法吗??

欢呼 nz 战士

4

3 回答 3

2

我想一旦用户通过 ajax 登录,您就会更新锚标签。所以你之前注册的事件绑定(点击事件)会丢失。您应该使用 jQueryon进行绑定而不是单击

这段代码

jQuery(".dropdown-cart dt a").click(function() {
     //remaining code   
});

应该改为

$(document).on("click",".dropdown-cart dt a",function() {
    //remaining code   
});

jqueryon适用于当前元素和未来元素,可从 jQuery 1.7+ 版本获得。

于 2012-05-29T12:14:26.653 回答
0

代替:

$(".dropdown-cart dt a").click(function(){})

和:

jQuery 1.7+

$(".dropdown-cart").on("click","dt a", function(){})

jQuery 1.4.3+

$(".dropdown-cart").delegate("dt a", "click", function(){})

jQuery 1.3+

$(".dropdown-cart dt a").live("click",function(){})

在这种情况下,您不需要绑定新的 ajax 加载组件。

于 2012-05-29T12:21:41.847 回答
0

尝试这个

将代码包装成 a并使用事件function在您的 html 标记中调用该函数onclick

onclick='function_name(this)' --> in your html tag

function function_name(element){
   //your code here
}
于 2012-05-29T12:14:19.127 回答