2013-12-06 5 views
0

Я устанавливаю событие щелчка на якоре, чтобы установить значение для кнопки (сначала кнопка имеет значение -1, которое не может быть отправлено), которое позже отправит Ajax вызов. Проблема в том, что иногда это работает, иногда нет; Я просто не понимаю, почему.jQuery - Событие не работает должным образом

JS:

$(".events-list a").click(function(e) { 
    e.preventDefault(); 
    var id = $(this).data('event-id'); 
    $(".edit-occurrence-button").val(id); 
}); 

HTML:

<div id="modal-edit-occurrence-form" class="modal hide fade" tabindex="-1" style="font-family: 'Open Sans', sans-serif;" role="dialog" aria-labelledby="modal-edit-occurrence-label" aria-hidden="true"> 
    <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 
     <h3 id="modal-edit-occurrence-label">Editar ocorrência</h3> 
    </div> 
    <div class="modal-body"> 
     <form> 
      <fieldset> 
       <!-- Some input fields here --> 
      </fieldset> 
     </form> 
    </div> 
    <div class="modal-footer"> 
     <button id="modal-edit-occurrence-submit" class="btn btn-info">Editar</button> 
     <button class="btn" data-dismiss="modal" aria-hidden="true">Cancelar</button> 
    </div> 
</div> 


<div class="modal hide fade" id="events-modal"> 
    <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 
     <h3>Ocorrência</h3> 
    </div> 
    <div class="modal-body" style="height: 600px;"> 
     <!-- Some content here --> 
    </div> 
    <div class="modal-footer"> 
     <button class="btn btn-info edit-occurrence-button" value="-1" data-dismiss="modal" aria-hidden="true">Editar</button> 
     <button class="btn" data-dismiss="modal" aria-hidden="true">Fechar</button> 
    </div> 
</div> 

РЕК: .events-list a это якорь, порожденный BootstrapCalendar динамически (http://bootstrap-calendar.azurewebsites.net/), который имеет следующий формат:

<div class="events-list" data-cal-start="1386126000000" data-cal-end="1386212400000"> 
    <a href="mylink.php?id=44" data-event-id="44" data-event-class="event-a" class="pull-left event event-a" data-toggle="tooltip" title="" data-original-title="a"></a> 
</div> 

EDIT: Я узнал, почему это не работает. Это зависит от того, какой элемент запускает событие. В календаре Bootstrap у нас есть 3 способа открытия события календаря (щелчок по событию в календаре, щелчок по событию после открытия событий дня, щелчок по последним событиям). Проблема заключается только в том, что я пытаюсь щелкнуть событие после открытия событий дня, потому что оно генерируется динамически. Как я могу это исправить?

+1

атрибут значение не то, что вы хотите. –

+3

Используйте '$ (". Edit-появление-button "). Val (id)' вместо того, чтобы устанавливать атрибут 'value'. Но покажите свой html и как воспроизвести проблему. – PSL

+0

Вы говорите, что событие не срабатывает, или что-то еще? Я бы предложил предоставить полный код для репликации проблемы. Предпочтительно с помощью [JSFiddle] (http://jsfiddle.net/) – musefan

ответ

2

Проблема заключается в том, что JQuery не может видеть элемент и присоединить обработчик событий.

Попробуйте использовать обработчик события jquery .on()

$("##static_parent##").on('click' , '.events-list a', function(e) { 
    e.preventDefault(); 
    var id = $(this).data('event-id'); 
    $(".edit-occurrence-button").val(id); 
}); 

Заменить ## static_parent ## с родительским элементом вашего целевого элемента, который оказанной на странице под нагрузкой. (если вы не можете найти «тело»).

Это может быть useful

+0

Но почему иногда работает? – Minoru

+0

Возможно, что-то связано с порядком загрузки - если ваш html генерируется до того, как ваш обработчик событий интерпретируется браузером - он, вероятно, работает, если html еще не создан, он этого не делает. Попробуйте мое решение, и оно должно работать каждый раз. –

+0

Я отредактировал вопрос. Я ошибался в том, что элемент генерируется до готовности DOM. – Minoru

1

Попробуйте preventing default event для <a> также с некоторым рефакторинга кода

$(".events-list a").click(function(e) { 
    e.preventDefault(); 
    var id = $(this).data('event-id'); 
    $(".edit-occurrence-button").val(id); 
}); 

Предполагая, что HTML выглядит, как показано ниже

<input type="submit" class="edit-occurrence-button" value="1" /> 

<ul class="event-list"> 
<li><a href="#">Event</a> 
</a> 
+0

Я отправил часть HTML. Я попытался адаптировать ваш код, но он тоже не работает. 'e.preventDefault();' didn 't solve. – Minoru

+0

@LucasHarada В чем проблема. Не работает, вы имеете в виду, что он не устанавливает значение? Вот шаблон начальной загрузки, если вы можете разместить здесь код и реплицировать свою проблему http: // jsfiddle .net/uejym/ – PSL

+0

Точно, иногда это работает хорошо, меняет значение от -1 до 44, на примере, иногда ничего не делает, значение -1 остается неизменным. – Minoru

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