Проблема обратного вызова JQuery Fancybox

Кажется, у меня интересная проблема с обратным вызовом и fancybox. Вот в чем проблема: у меня есть модный ящик, который я вызываю с помощью нескольких кнопок. Fancybox - это модальное поле "да нет". Когда пользователь выбирает «да», выполняется обратный вызов. Это прекрасно работает. Проблема возникает, когда пользователь выбирает другой элемент, отображается fancybox и пользователь снова выбирает «да». Обратный вызов запускается дважды: один раз для предыдущего элемента и один раз для нового элемента. Вот мой код:

Вызов кнопки для отображения fancybox (несколько на странице):

<button id="ctl00_ContentPlaceHolderColMain_ucSKUList_rptSkuList_ctl00_btnAdd" class="btn btnCart btnColor5" ss="oos" skuid="12345" onclick="initAddToCart(this);">Back Order</button>

Fancybox html:

<div id="backorderVerify" style="display:none;">
        <div class="inner">
            <h2>Item is not in stock!</h2>
            <div class="base">
                <div align='center'>
                    Would you like to backorder?
                </div>
                <div align="center" style="margin:20px 0 0 0;">
                    <input type="button" id="btnBOYes" value="Yes" />
                    <input type="button" id="btnBONo" value="No" />
                </div>              
            </div>
        </div>
    </div>

Javascript:

function backorderVerify(objAddBtn) {

    $.fancybox({
        'closeBtn': false,
        'href' : '#backorderVerify',
        'beforeShow' : function () {

            $("#btnBOYes").click(function () {
                $.fancybox.close(true);                    
                    addToCart($(objAddBtn).attr("skuid"), objAddBtn);
            });

            $("#btnBONo").click(function () {
                $.fancybox.close(true);
            });
        }

    });


}

Заранее спасибо!


person DJH    schedule 16.08.2012    source источник
comment
Ваш HTML недействителен. <input type="button"></button>. <button> и <input> - две разные вещи; вы не закрываете один вид тега другим, совершенно другим тегом. input обычно самозакрывающийся, <input />. Также align="center" некоторое время назад устарел. Запустите свою страницу с помощью W3C Validator.   -  person Sparky    schedule 17.08.2012
comment
Я исправил HTML в вопросе (ошибка вырезания и вставки). Неважно, обесценится ли стиль или нет.   -  person DJH    schedule 17.08.2012
comment
Нет, вопрос не в этом, но вполне допустимо указывать подобные ошибки кодирования в комментариях. SO - это место для обучения (даже если вы не можете этого оценить) для читателя.   -  person Sparky    schedule 17.08.2012
comment
Вы повторяете id="btnBOYes" и id="btnBONo" где-нибудь на странице? Идентификатор должен быть уникальным, иначе у вас будет недопустимый HTML, что может вызвать другие проблемы ... и в этом суть.   -  person Sparky    schedule 17.08.2012
comment
Да, обе кнопки полностью уникальны на странице.   -  person DJH    schedule 17.08.2012
comment
Как вы вызываете функцию backorderVerify()?   -  person JFK    schedule 17.08.2012
comment
Похоже, что обратный вызов внутри функции backorderVerify() не закрыт должным образом .... вы закрываете обратный вызов beforeShow перед тем, как привязываете click к селектору #btnBONo, если только это не другая ошибка копирования / вставки.   -  person JFK    schedule 17.08.2012
comment
JFK - функция вызывается с помощью другого js-метода, который определяет, нет ли товара в наличии. Я перешагнул и убедился, что все закрыто как следует. Это почти похоже на то, что fancybox прикрепляет каждую итерацию к DOM, но не удаляет ее после закрытия, поэтому каждый раз, когда нажимается кнопка «Да», он перемещается по каждому экземпляру и запускает событие click.   -  person DJH    schedule 17.08.2012
comment
Почему вы не редактируете свой вопрос с помощью правильно закрытого кода (тот, который у вас нет), иначе вводит в заблуждение, если вам больше не нужна помощь.   -  person JFK    schedule 20.08.2012
comment
Прости за это. Он был отредактирован.   -  person DJH    schedule 20.08.2012


Ответы (2)


Хорошо, у fliim была правильная идея. Предыдущее шоу было привязано каждый раз, когда вызывали fancybox. Следовательно, он вызывался для каждого связанного элемента. В итоге я вытащил события щелчка Да / Нет из вызова fancybox и сделал каждый свой метод, который будет вызываться кнопками. Спасибо за помощь в этом.

person DJH    schedule 23.10.2012

Я думаю, вы не должны определять дескриптор клика в событии beforeShow. Может быть, каждый раз, когда происходит событие, он определяет еще раз.

person fliim    schedule 16.08.2012
comment
не могли бы вы сказать мне, почему вы понизили меня? - person fliim; 17.08.2012
comment
Предоставьте грамматически правильное решение вместе с соответствующим кодом. - person Sparky; 17.08.2012
comment
вы дали мне -1, потому что я предлагаю решение без указания кода? - person fliim; 17.08.2012
comment
Я сказал, что дал тебе -1? Я предлагаю вам исправить орфографию, грамматику и добавить код, чтобы ваш ответ имел смысл. - person Sparky; 17.08.2012