Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.01.2017, 10:58
Новичок на форуме
Отправить личное сообщение для svikator Посмотреть профиль Найти все сообщения от svikator
 
Регистрация: 12.01.2017
Сообщений: 5

не работает onclick для добавляемого элемента
Доброго всем дня.
Есть div контейнер #send-review который запускается в окне fancybox всё здорово отрабатывает при нажатии на кнопку появляется всплывающее окно. Так вот на появившемся диве #send-review есть кнопка #button-send-review. При нажатии на эту кнопку должен срабатывать onclick(), но он не срабатывает. Погуглив и немного почитав понял что нужно использовать делигированые события, но почему то оно всё равно не отрабатывает.Пытаюсь прикрепить событие к существующему блоку #content-block в котором всё это находится, получается как то так:

$('#content-block').on('click', '#button-send-review', function(){
Ответить с цитированием
  #2 (permalink)  
Старый 12.01.2017, 11:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

svikator,
либо '#content-block' тоже добавляется либо какое-то id не уникально
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2017, 11:43
Новичок на форуме
Отправить личное сообщение для svikator Посмотреть профиль Найти все сообщения от svikator
 
Регистрация: 12.01.2017
Сообщений: 5

Да действительно content-block добавлялся, переназначил на другой блок заработало. Возник ещё 1 вопрос, чтобы не плодить темы напишу сюда. У меня в этом блоке #send-review кроме срабатывающей кнопки есть инпуты, которые должны изменяться при нажатии.Они изменяются< только при повторном запуске окна #send-review. Как сделать чтобы они изменялись срузу же при нажатии.
Вот так не работает:
$("#name_review").css("borderColor","#FDB6B6");
и так тоже:
var name_review=document.getElementById('name_review');
			name_review.style.borderColor = '#FDB6B6';

То есть работают, но только при перезапуске.
Ответить с цитированием
  #4 (permalink)  
Старый 12.01.2017, 11:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

svikator,
делайте минимальный макет иначе ничего не понятно
Ответить с цитированием
  #5 (permalink)  
Старый 12.01.2017, 12:45
Новичок на форуме
Отправить личное сообщение для svikator Посмотреть профиль Найти все сообщения от svikator
 
Регистрация: 12.01.2017
Сообщений: 5

Это содержимое которое добавляется через fancybox:
<div id="send-review">
    
		<p align="right" id="title-review">Отзыв появиться после проверки администрацией</p>
		
		<ul>
		<li><p align="right"><label id="label-name" >Имя<span>*</span></label><input maxlength="15" type="text"  id="name_review" /></p></li>
		<li><p align="right"><label id="label-good" >Плюсы<span>*</span></label><textarea id="good_review" ></textarea></p></li>    
		<li><p align="right"><label id="label-bad" >Минусы<span>*</span></label><textarea id="bad_review" ></textarea></p></li>     
		<li><p align="right"><label id="label-comment" >Комментарий</label><textarea id="comment_review" ></textarea></p></li>  
		<p align="right" id="button-send-review" iid="'.$id.'" >Отправить</p>
			
		</ul>
		
		
    </div>


Затем идёт js который обрабатывает нажатие на динамически добавленую кнопку и нужно чтобы работал на динамически добавленые инпуты:
$('body').on('click', '#button-send-review', function(e){ 
                 
   var name = $("#name_review").val();
   var good = $("#good_review").val();
   var bad = $("#bad_review").val();
   var comment = $("#comment_review").val();
   var iid = $("#button-send-review").attr("iid");
 
    if (name != "")
     {
          name_review = '1';
          $("#name_review").css("borderColor","#DBDBDB");
		  
      }else {
           name_review = '0';
           $("#name_review").css("borderColor","#FDB6B6");
      }
                   
    if (good != "")
       {
          good_review = '1';
          $("#good_review").css("borderColor","#DBDBDB");
      }else {
          good_review = '0';
          $("#good_review").css("borderColor","#FDB6B6");
      }
             
    if (bad != "")
     {
          bad_review = '1';
          $("#bad_review").css("borderColor","#DBDBDB");
     }else {
          bad_review = '0';
          $("#bad_review").css("borderColor","#FDB6B6");
     } 
                                          
             
            // Глобальная проверка и отправка отзыва
             
    if ( name_review == '1' && good_review == '1' && bad_review == '1')
      {
         $("#button-send-review").hide();
         $(".auth-loading").show();
                   
      $.ajax({
         type: "POST",
         url: "/include/add_review.php",
         data: "id="+iid+"&name="+name+"&good="+good+"&bad="+bad+"&comment="+comment,
         dataType: "html",
         cache: false,
         success: function() {
         setTimeout("$.fancybox.close()", 1000);
         }
         });  
         }         
});
Ответить с цитированием
  #6 (permalink)  
Старый 12.01.2017, 12:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

svikator, пробуйте
$(function() {
$('body').on('click', '#button-send-review', function(e){
   var parent = $(this).parents('#send-review');
   var name = $("#name_review",parent).val();
   var good = $("#good_review",parent).val();
   var bad = $("#bad_review",parent).val();
   var comment = $("#comment_review",parent).val();
   var iid = $("#button-send-review",parent).attr("iid");

    if (name != "")
     {
          name_review = '1';
          $("#name_review",parent).css("borderColor","#DBDBDB");

      }else {
           name_review = '0';
           $("#name_review",parent).css("borderColor","#FDB6B6");
      }

    if (good != "")
       {
          good_review = '1';
          $("#good_review",parent).css("borderColor","#DBDBDB");
      }else {
          good_review = '0';
          $("#good_review",parent).css("borderColor","#FDB6B6");
      }

    if (bad != "")
     {
          bad_review = '1';
          $("#bad_review",parent).css("borderColor","#DBDBDB");
     }else {
          bad_review = '0';
          $("#bad_review",parent).css("borderColor","#FDB6B6");
     }


            // Глобальная проверка и отправка отзыва

    if ( name_review == '1' && good_review == '1' && bad_review == '1')
      {
         $("#button-send-review",parent).hide();
         $(".auth-loading").show();

      $.ajax({
         type: "POST",
         url: "/include/add_review.php",
         data: "id="+iid+"&name="+name+"&good="+good+"&bad="+bad+"&comment="+comment,
         dataType: "html",
         cache: false,
         success: function() {
         setTimeout("$.fancybox.close()", 1000);
         }
         });
         }
});

});
Ответить с цитированием
  #7 (permalink)  
Старый 12.01.2017, 15:58
Новичок на форуме
Отправить личное сообщение для svikator Посмотреть профиль Найти все сообщения от svikator
 
Регистрация: 12.01.2017
Сообщений: 5

Попробовал, теперь событие отрабатывает, уже что то...Но теперь в аяксе ругается на строку
setTimeout("$.fancybox.close()", 1000);

Uncaught ReferenceError: fancybox is not defined
at <anonymous>:1:1
Так тоже не работает:
parent.fancybox.close()

Инпуты по прежнему не изменяются.

Последний раз редактировалось svikator, 12.01.2017 в 16:06.
Ответить с цитированием
  #8 (permalink)  
Старый 12.01.2017, 16:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

svikator,
а не строкой пробовали?
Сообщение от svikator
"$.fancybox.close()",
Ответить с цитированием
  #9 (permalink)  
Старый 12.01.2017, 16:56
Новичок на форуме
Отправить личное сообщение для svikator Посмотреть профиль Найти все сообщения от svikator
 
Регистрация: 12.01.2017
Сообщений: 5

Пробовал ошибка:
Uncaught TypeError: Cannot read property 'close' of undefined
at HTMLParagraphElement.<anonymous> (shop-script.js:945)
at HTMLBodyElement.dispatch (jquery-1.8.2.min.js:3)
at HTMLBodyElement.h (jquery-1.8.2.min.js:3)

И ещё обратил внимание что в строках:

var name = $("#name_review",parent).val();
   var good = $("#good_review",parent).val();
   var bad = $("#bad_review",parent).val();
   var comment = $("#comment_review",parent).val();

Не присваиваются значения переменных. Если пройтись отладчиком то у них тип undefined
Естественно перед отправкой значения заполняю.

Последний раз редактировалось svikator, 12.01.2017 в 17:02.
Ответить с цитированием
  #10 (permalink)  
Старый 12.01.2017, 17:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

svikator,
без макета к телепатам ... возможно у вас несколько jquery, возможно у вас уже нет $, возможно вам нужен новый fancybox
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Альтернатива с onclick для события в yandex winter Общие вопросы Javascript 3 19.10.2013 16:22
onClick для добавленного элемента в DOM sanambler Events/DOM/Window 2 23.07.2013 00:49
Не работает форма для сбора информации на jquery Ranetka jQuery 10 13.10.2012 14:01
Не работает onClick в IE ivan1 Events/DOM/Window 4 14.10.2011 20:55
Onclick элемента списка <li> eternal Events/DOM/Window 5 05.09.2011 22:18