0

Когда я пытаюсь выполнить некоторые JS, нажав кнопку, это не делает то, что я хочу. Однако, когда я запускаю консоль JS и запускаю ее вручную, она работает.Почему фактический щелчок мыши не работает, но делает .click() в консоли JS?

Вот весь мой JS файл (входит в комплект только в случае, если есть конфликт):

var ready; 
ready = function() { 

    // This is the Sidebar toggle functionality that I am most interested in 
    var toggleSidebar = $("#togglesidebar"); 
    var primary = $("#primary"); 
    var secondary = $("#secondary"); 

    toggleSidebar.on("click", function(){ 

     if(primary.hasClass("col-xs-9")){ 
      primary.removeClass("col-xs-9"); 
      primary.addClass("col-xs-12"); 
      secondary.css('display', 'none'); 
     } 
     else { 
      primary.removeClass("col-xs-12"); 
      primary.addClass("col-xs-9"); 
      secondary.css('display', 'inline-block'); 
     } 
    }); 
}; 

$(document).ready(ready); 
$(document).on('page:load', ready); 

counter = function() { 
    var body_value = $('#post_body').val(); 
    var title_value = $('#post_title').val();  

    if (body_value.length == 0) { 
     $('#wordCountBody').html(0); 
     $('#totalCharsBody').html(0); 
     return; 
    } 

    if (title_value.length == 0) { 
     $('#wordCountTitle').html(0); 
     return; 
    } 

    var regex = /\s+/gi; 
    var wordCountBody = body_value.trim().replace(regex, ' ').split(' ').length; 
    var totalCharsBody = body_value.length; 
    var wordCountTitle = title_value.trim().replace(regex, ' ').split(' ').length; 

    $('#wordCountBody').html(wordCountBody); 
    $('#totalCharsBody').html(totalCharsBody); 
    $('#wordCountTitle').html(wordCountTitle); 
}; 

$(document).ready(function() { 
    $('#count').click(counter); 
    $('#post_body, #post_title').on('change keydown keypress keyup blur focus', counter); 
     $('body').tooltip({ selector: "[data-toggle~='tooltip']"}); 
}); 

Вот это HTML, которые инициированы:

<div class="hidden-xs col-sm-3 masthead-group-3 pull-left"> 
    <div id="togglesidebar" class="pull-right"> 
    <button class="btn btn-default btn-lg btn-primary"><i class="fa fa-child"></i> Submit News</button> 
    </div> 
</div> 

Тем не менее, когда я иду в консоль и сделать это он прекрасно работает:

$("#togglesidebar"); 
[<div id=​"togglesidebar" class=​"pull-right">​…​</div>​] 
$("#togglesidebar").click(); 
[<div id=​"togglesidebar" class=​"pull-right">​…​</div>​] 

Вы можете see it live here.

+0

Что-нибудь перехватывает событие click, прежде чем оно попадет в JS-движок? – LuigiEdlCarno

+0

Щелчок идет к кнопке, я думаю. –

+0

@LuigiEdlCarno Я сомневаюсь в этом, но как я могу проверить? Вы можете проверить источник, чтобы увидеть? – marcamillion

ответ

1

У вас есть две кнопки с одинаковым идентификатором.

jQuery # селектор найти только first match этого идентификатора, поэтому первая кнопка, которая скрыта.

Удалить или изменить его имя, и он должен работает ;-)

Edit:

Вы также можете изменить их в .className, а не как id и все соответствующие ссылки на классы, и он должен работать ,

+0

Ahh ... интересный. Я предполагаю, что проблема в том, что я хочу иметь ту же функциональность, но в разных представлениях (например, на рабочем столе или на мобильных устройствах). Должен ли я просто жить с дублирующими функциями в моем JS? Или есть какой-то изящный способ СУБДАТЬ мой код и учитывать два элемента с двумя разными идентификаторами? – marcamillion

+1

Используйте класс вместо идентификатора, если вы хотите, чтобы одна и та же функциональность/обработка событий для нескольких элементов – st3inn

+0

вместо идентификаторов вы должны использовать класс для соответствия вашим кнопкам ;-) –

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