2015-12-15 14 views
1

Прежде всего - Я видел много вопросов по Stackoverflow связанных с отменяя с помощью JQuery, но я не нашел ответа, который бы решить мою конкретную ситуацию. Возможно, что я что-то пропустил - не стесняйтесь направить меня на соответствующий вопрос/ответ, уже отправленный - спасибо!Jquery развязывание не работает

У меня проблемы с пониманием того, почему развязка событий/обработчиков не работает.

Я использую Wordpress 4.4 (хотя я думаю, что Wordpress здесь неактуален), Firefox 42, jQuery 1.11.3.

Соответствующие части моего .html и .js файлы - вот HTML часть:

<div class="py2web-diag-row1-col2"> 
<ul class="tabs"> 
    <li> <a class="sol-show" target="<?php echo($id); ?>">Show solution</a> </li> 
    <li><a class="sol-hide" target="<?php echo($id); ?>" disabled>Hide solution</a></li> 
</ul> 
</div> 

Соответствующая часть из scripts.js файла:

jQuery(".sol-hide").click(function() { 

    // Get id of the corresponding problem solution 
    id = this.attributes["target"].value; 

    // Show (unhide) solution div element with target attribute of the current problem 
    sel = '.p2w-solution[target="' + id + '"]'; 
    jQuery(sel).css("visibility", "hidden"); 

    // Deactivate hide-sol and activate show-sol 
    sel = '.sol-hide[target="' + id + '"]'; 
    jQuery(sel).attr("disabled", false); 
    this.setAttribute("disabled", true); 

    // Activate py2web-s internal events (show moves when clicking on board) 
    sel = '.p2w-diagram[id="' + id + '"] .p2w-nav-fwd'; 
    //jQuery(sel).off("click"); 
    jQuery(sel).unbind("click"); 
    sel = '.p2w-diagram[id="' + id + '"] .p2w-nav-bwd'; 
    //jQuery(sel).off("click"); 
    jQuery(sel).unbind("click"); 
}); 

обработчики событий Нажмите на .p2w -nav-FWD (BWD) элементы определены в другом файле JS, следующим образом:

jQuery(".p2w-nav-fwd").bind("click", Py2Web.navigateForward); 
jQuery(".p2w-nav-bwd").bind("click", Py2Web.navigateBackward); 

и немного ниже, в Py2Web определение:

navigateForward: function(L) { 
     L.preventDefault(); 
     C(jQuery('.p2w-solution[target="' + jQuery(this).parent().attr("id") + '"]').children(".active").nextAll("a").first()) 
    }, 
navigateBackward: function(L) { 
     L.preventDefault(); 
     C(jQuery('.p2w-solution[target="' + jQuery(this).parent().attr("id") + '"]').children(".active").prevAll("a").first()) 
    } 

Так, нажав на ".sol-шоу", то есть ".sol скрытие", якорь, обработчик события "нажмите кнопку" для .p2w-нав-FWD и .p2w-нав -bwd должны быть включены (bind), т.е. отключены (unbind). Однако отключение просто не работает.

Надеюсь, я предоставил всю необходимую информацию, пожалуйста, запросите дополнительные, если необходимо.

Любая помощь приветствуется.

+0

Вы пробовали использовать метод? – madalinivascu

+0

Я пробовал, к сожалению, тоже не работает - не знаю почему. В этом ответе есть тот же совет ... – mf27

ответ

1

Я решил проблему: в Wordpress, я загружаю свою локальную версию JQuery, а не по умолчанию Wordpress' - но по умолчанию было загружен после местных - теперь я изменил порядок загрузки, так все мои скрипты загружаются только после jQuery - и он отлично работает ... Я должен был это осознать раньше. Спасибо за помощь и извините за ваше время.

+0

Нет проблем, рад, что вы сделали это ^^, вы должны отметить свой собственный ответ как правильный, ведь вы решили его сами :) –

+0

Вы спасли мой день! – antongorodezkiy

0

Вы уверены, что селектор работает и находит элемент?

sel = '.p2w-solution[target="' + id + '"]'; 

Кроме того, вместо мыши и привязки я бы использовать «On» и «Off» методы, потому что у меня были проблемы, прежде чем с «нажмите» и «отвязать» и я вижу, что это то, что вы используете.

Таким образом, вы можете использовать что-то вроде этого:

jQuery(".sol-hide").on('click', function() { 
    sel = '.p2w-solution[target="' + id + '"]'; 

    ... 

    jQuery(sel).off('click'); 
}); 

Я хотел бы попробовать, что и посмотреть, что происходит.

+0

Я проверил, что селектор работает по назначению. Я также пробовал методы «on» и «off», не работает. Здесь что-то не так, и я не знаю, что. Где именно, в js-объекте, возвращаемом селектором jQuery, могу ли я видеть все активные события и соответствующие обработчики? Возможно, изучение этого поможет ... – mf27

+0

Для этого я использую расширение chrome под названием Visual Events (https://chrome.google.com/webstore/detail/visual-event/pbmmieigblcbldgdokdjpioljjninaim), надеюсь, это поможет вам проверить событие. Кроме того, вы пытались изменить этот «jQuery («. Sol-hide »). Нажмите« для »jQuery («. Sol-hide »). On ('click', ...)"? я имею в виду, вместо того, чтобы нажать + выкл., включите + выключить ?? –

+0

К сожалению, я использую только Firefox, а не поклонник Chrome. На самом деле, у меня есть обратная связь, что отмена работы в Chrome - так что это может быть проблема, связанная с Firefox, но все же я хотел бы ее понять. Что касается вашего вопроса, событие «click» на элементе «.sol-hide» здесь не так важно, меня интересует привязка/развязка события «click» на .p2w-diagram [id = "'+ id + '.] .p2w-nav-fwd' и '.p2w-diagram [id = "' + id + '"] .p2w-nav-bwd', ".sol-hide" не имеет прямого отношения. – mf27

Смежные вопросы