2015-09-25 7 views
0

У меня есть следующий код:OnClick не работает в т

<input class="button button-blue" type="button" onclick="jQuery.fancybox.close(); " value="Close"> 

В то есть, когда я нажимаю на кнопку OnClick обработчик события не работает. «не работает», что означает, что диалоговое окно «Причудливое окно» не закрывается. Но как только я внес изменения в значение onclick (т. Е. Добавьте пробел после jQuery.fancybox.close()), используя f12, тогда обработчик события onclick начнет работать.

Примечание:

  • Там нет ошибок сценариев
  • отлично работает на хром и Firefox
  • кажется, что любое изменение значения OnClick будет вызывать обработчик события, чтобы начать работать.

Любые предложения по устранению неполадок?

$.fancybox({ 
     'modal': true, 
     height: '10%', minHeight: '60', 
     'content': "<div style=\"margin:10px;\">" 
     + 'Your message has been sent.' 
     + "<div style=\"text-align:center;margin-top:10px;\"><input  class=\"button button-blue\" type=\"button\" onclick=\"jQuery.fancybox.close(); Backbone.pubSub.trigger('myContentShowHide');\" value=\"My Content\"></div>" 
     + "<div style=\"text-align:center;margin-top:10px;\"><input  class=\"button button-blue\" type=\"button\" onclick=\"jQuery.fancybox.close(); \" value=\"Close\"></div>" 
}); 
+0

У вас уже есть jQuery ... считаете ли вы, что не используете встроенные обработчики onclick? – Sparky

+0

ОК, спасибо. Я попытаюсь удалить обработчик события inline. – bradley4

+0

Насколько я могу судить, это работает на меня, даже на IE7 http://jsfiddle.net/pzosotpx/show/ – JFK

ответ

1

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

Так что избавитесь от обработчиков событий inline и используйте обработчики событий jQuery. Поскольку кнопка элемент еще не существует, когда этот код называется, вы должны будете использовать подход событий делегации ...

jQuery(document).ready(function($) { 

    $('body').on('click', 'input.button[value="Close"]', function() { 
     $.fancybox.close(); 
    }); 

}); 

См: http://api.jquery.com/on/

DEMO: http://jsfiddle.net/6k1o7amL/

+0

Я ценю демонстрацию. Я сделаю это. – bradley4

+0

Диалоговое окно fancybox добавляется на страницу после ее загрузки. Это диалоговое окно, отображаемое после того, как пользователь принял меры. Если я добавлю скрипт выше на главной странице, это не произойдет, потому что кнопка еще не добавлена ​​в DOM. Я обновил исходный вопрос с помощью скрипта, который добавляет диалог. – bradley4

+0

@ bradley4, вам просто нужно использовать делегирование. См. Мой измененный ответ. – Sparky

0

Избегайте использования встроенных обработчиков событий. Привязать событие к кнопке, используя jQuery, например:

jQuery(document).ready(function(){ 

    jQuery('.button').click(function(e){ 
     jQuery.fancybox.close(); 
     e.preventDefault(); 
    }); 

}); 
+0

'.preventDefault()' должен быть * первым *, а не последним. Независимо от того, это кнопка 'type =", поэтому IMO нет необходимости в '.preventDefault()'. Кроме того, 'document' не входит в кавычки. – Sparky

+0

Наконец, ваш селектор jQuery будет нацелен на *** любые/все *** кнопки с классом '.button'. – Sparky

+0

@Sparky, preventDefault на всякий случай. :) Почему это должна быть первая строка, у меня никогда не было проблем с помещением ее в блок событий, где бы вы ни находились ... Согласитесь с селектором кнопок, хотя ваш более точный таргетинг. –