限制孩子拉入jQuery功能

时间:2016-06-01 16:44:04

标签: javascript jquery navigation

我对某些编码语言非常陌生,我正在努力教我自己。经过一些研究,我通常能够解决我的问题,但我真的被卡住了。我有一个响应式导航系统,子菜单使用jquery构建,但在响应式视图中,只有子菜单的按钮才会扩展子部分。

现有代码:

void LiberarMemoriaMatriz(double*** M,int n){
    int i = 0;
    if(M == NULL) return;
    for(i=0; i<=n; i++){
        free((*M)[i]);
    }
    free(*M);
}

int ReservarMemoriaMatriz(double*** M, int n, int ,){
    int i = 0;
    if(M == NULL) return 0;
    (*M) = malloc((n+1)*sizeof(double*));
    if((*M) == NULL){
        return 0;
    }
    for(i = 0; i<=n; i++){
        (*M)[i] = malloc(m*sizeof(double));
        if((*M)[i] == NULL){
            /* free what is allocated before failing */
            for(i--; i>=0; i--) free((*M)[i]);
            free(*M);
            return 0;
        }
    }
    return 1;
}

我玩了一下,但是当我做了以下更改时,打开/关闭子菜单会关闭父菜单。

cssmenu.find('li ul').parent().addClass('has-sub');

multiTg = function() {
          cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>');
          cssmenu.find('.submenu-button').on('click', function() {
            $(this).toggleClass('submenu-opened');
            if ($(this).siblings('ul').hasClass('open')) {
              $(this).siblings('ul').removeClass('open').hide();
            }
            else {
              $(this).siblings('ul').addClass('open').show();
            }
          });
        };

我认为我的问题是如何限制切换功能调用的子元素?或者我是否完全搞砸了这一切?任何帮助或指向我正确的方向将是非常有帮助的!谢谢!

PS,导航的HTML:

cssmenu.find('li ul').parent().addClass('has-sub');

multiTg = function() {
          cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>');
          cssmenu.find('.submenu-button').parent().on('click', function() {
            $(this).children('.submenu-button').toggleClass('submenu-opened');
            if ($(this).children('ul').hasClass('open')) {
              $(this).children('ul').removeClass('open').hide();
            }
            else {
              $(this).children('ul').addClass('open').show();
            }
          });
        };

1 个答案:

答案 0 :(得分:0)

您的第二个代码几乎就在那里,只是点击向上传播,从而触发了对父菜单项的点击。

使用console.log始终是个好主意。您将看到对孩子的点击会在控制台中触发2条消息:https://jsfiddle.net/7r729q5r/2/

要停止行为,请使用stopPropagation():

   cssmenu.find('.submenu-button').parent().on('click', function(event) {
      event.stopPropagation();

参见https://jsfiddle.net/7r729q5r/3/

附近的第36行

此外,你的css第230行有一个错误,导致菜单在某些宽度上消失。