Почему это ‘$ (…).trigger («click»)’ не работает внутри этой функции (jQuery)?

#jquery

#jquery

Вопрос:

Следующая функция открывает всплывающее окно, когда я нажимаю на ссылку:

 function popupPlace(dict) {
    $popup = $('div#dish-popup');
    $popup.render(dict,window.dishPopupTemplate);
    if(typeof(dict.dish) === 'undefined') {
        $popup.addClass('place-only');
    } else {
        $popup.removeClass('place-only');
    }

    var $place = $('div#dish-popup div.place');
    var place_id = dict.place._id;
    if(liked[place_id]) {
        $place.addClass('liked');
    } else {
        $place.removeClass('liked');
    }
    if(dict.place.likes) {
        $place.addClass('has-likes');
    } else {
        $place.addClass('zero-likes');
    }


    var tokens = window.currentSearchTermTokens;
    var tokenRegex = tokens amp;amp; new RegExp($.map(tokens, RegExp.escape).join('|'), 'gi');
    $.each(dict.place.products, function(n, product) {
        $product = $('#menu-item-' product.id);
        if(liked[place_id '/' product.id]) {
            $product.addClass('liked');
        }
        if(tokens amp;amp; matchesDish(product, tokens)) {
            $product.addClass('matched');
            $product.highlight(tokenRegex);
        } else {
            $product.removeClass('matched');
            $product.removeHighlight();
        }
        if(product.likes) {
            $product.addClass('has-likes');
        } else {
            $product.addClass('zero-likes');
        }
    });

    $('#overlay').show();
    $('#dish-popup-container').show();

    // Scroll to matched dish
    $("a#scrolll").attr("href", "#"   $("li.matched").attr("id"));
    $("a#scrolll").trigger("click");

    // Hide dish results on mobile devices to prevent having a blank space at the bottom of the site
    if (Modernizr.mq('only screen and (max-width: 640px)')) {
        $('ol.results').hide();
    }

    $(".close-dish-popup").click(function() {
        $("#overlay").hide();
        $("#dish-popup-container").hide();
        $('ol.results').show();
        changeState({}, ['dish', 'place', 'serp']);
    });

    showPopupMap(dict.place, "dish-popup-map");
}
  

В конце вы можете увидеть следующее:

     $("a#scrolll").trigger("click");
  

Все работает, но эта ссылка не запускается, как только появляется всплывающее окно:

     $('#dish-popup-container').show();
  

Есть предложения по исправлению этого?

Комментарии:

1. Вы получаете какие-либо ошибки в вашей консоли JS?

2. Что произойдет, если заменить .trigger("click") на .click() ?

3. Не могли бы вы поместить это в jsfiddle. чистый пример, чтобы мы могли увидеть это в действии?

4. это работает: $("#scrolll").click(function() { $("a#scrolll").attr("href", "#" $("li.matched").attr("id")); }); внутри функции

Ответ №1:

вы вызываете $("a#scrolll").trigger("click"); перед назначением $('#dish-popup-container').show(); перед назначением события click кнопке close. просто поместите $(".close-dish-popup").click(); внешнюю сторону функции или верхнюю часть функции (перед ее вызовом)

Комментарии:

1. Не могли бы вы уточнить? Я не вижу, чтобы эта функция вызывалась в коде.

2. $(".close-dish-popup").click(); просто закрывает всплывающее меню, я не думаю, что это имеет какое-то отношение к #scrolll ссылке.

3. когда вы показываете всплывающее окно, событие щелчка не назначается. поместите событие щелчка снаружи или перед $('#dish-popup-container').show();

4. @Chamika Sandamal но событие щелчка находится не внутри $('#dish-popup-container').show(); , а ниже (я пытался поместить его раньше, но это не помогло).

5. событие click не находится внутри события show , это правда. но когда вы показываете всплывающее окно, событие закрытия не присваивается кнопке закрытия.

Ответ №2:

поместить

 $(".close-dish-popup").click(function() {
    $("#overlay").hide();
    $("#dish-popup-container").hide();
    $('ol.results').show();
    changeState({}, ['dish', 'place', 'serp']);
});
  

в $ (document).готовая внешняя сторона

 function popupPlace(dict) {
  

вы пытаетесь вызвать ее, но она не инициализируется при вызове

Комментарии:

1. $(".close-dish-popup").click(function() { ... работает нормально, что не работает, так это $("a#scrolll").trigger("click");

2. когда вы запускаете функцию click, она вызывает функцию click . это похоже на то, что вы вызываете метод . думаю, вы вызываете метод test() . чтобы вызвать метод test, вы должны инициализировать свой метод test () . перед ее вызовом в jquery мы обычно размещаем пользовательские функции на стороне document.ready , а функции jquery, такие как click в document.ready , инициализируются при загрузке DOM , в данном случае вы пытаетесь получить доступ к функции, она еще не инициализирована . если вы определили щелчок в вашем $ (документе). готово, она будет доступна при ее вызове