#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 , в данном случае вы пытаетесь получить доступ к функции, она еще не инициализирована . если вы определили щелчок в вашем $ (документе). готово, она будет доступна при ее вызове