2013-02-25 2 views
0

Сегодня я попытался сделать простую кнопку закрытия в javaScript. К сожалению, он не работает. Вот как это выглядит следующим образом:Javascript «закрыть кнопку» не работает

<div id="popup_bg"> 
<div id="popup_window"> 
<span id="popup_close"> 
</span> 
</div> 
</div> 

и код JS является:

<script type=”text/javascript”> 
     $("#popup_close").click(function() { 
     $("#popup_bg").fadeOut(); 
     event.stopPropagation(); 
     }); 
</script> 

Я хотел бы также сделать его применить к любой из этих «всплывающих окон», поэтому я, наверное, изменить my это что-то вроде $ (this) .parent(). parent(). fadeOut(); - можно ли это сделать?

Спасибо за помощь, ребята! :)

@EDIT

Как ни один из ваших решений не работать, я разместить код в буквальном смысле: D Может быть, вы найдете какие-то ошибки, что делает его из строя:

<?php if(isset(errors['user'])) : ?>  
<script type="text/javascript"> 
    $(function() 
    { 
     $("#popup_close").on('click', function() { 
     $("#popup_background").fadeOut(); 
     //event.stopPropagation(); 
     }); 
    }); 
</script> 
<div id="popup_background" > 
    <div class="popup_window"> 
     <span class="title"> 
     error 
     </span> 
     <span class="message"><?php echo errors['user']; ?> 
     </span> 
     <span id="popup_close" class="button">OK</span> 
    </div> 
</div> 
<?php endif; ?> 

Я надеюсь, что будет help Вы обнаружите ошибки. Он показывает правильно, я нажимаю на мой «OK» пролет, ничего не происходит: р Я ненавижу ЯША: D

ответ

1

Я видел ваш код, часть jquery код работает .. Проверьте здесь: Jsfiddle ->http://jsfiddle.net/Zahinize/7YD4D/13/

Вы должны переписать условное Если заявление, как это,

<? ini_set('error_reporting', E_ALL); ?> 

<script type="text/javascript"> 
    $(function() 
    { 
    $("#popup_close").on('click', function() { 
    $("#popup_background").fadeOut(); 
    //event.stopPropagation(); 
    }); 
    }); 
    </script> 

<div id="popup_background" > 
    <div class="popup_window"> 
    <span class="title"> 
    error 
    </span> 
    <span class="message"> 

    <?php 
    if(isset(errors['user'])){  
     echo errors['user']; 
     } 
    ?> 
    </span> 
    <span id="popup_close" class="button">OK</span> 
    </div> 
</div> 

набор error_reporting в том, что сверху ..

Подробнее здесь: http://php.net/manual/en/function.error-reporting.php

Возможно, это помогло бы, но, откровенно говоря, я не видел обработки ошибок следующим образом: error ['user'] в любом месте .. вы должны увидеть обработку ошибок для написания лучшего кода;)

+1

oh, I kno w, но на самом деле это не «обработка ошибок»; p в основном это то, что отправляется через $ _POST; d проблема заключается в том, что это «всплывающее окно» никогда не должно появляться, если эта «ошибка» не установлена ​​- вот почему это связано с тем, , – Ziker

+0

и что я сделал - я удалил все условные выражения, и он все еще не работает ...: | Я сделал чек, и он не входит внутрь функции после нажатия кнопки «. – Ziker

+1

Хорошо, я сделал это сейчас. Я поставил php, если установить дополнительный класс «hidden» в мой элемент, если эта переменная не установлена. Таким образом, он не появится, если эта переменная не содержит что-то. Спасибо! – Ziker

1

идентификаторов должны уникальным, вы должны использовать классы вместо:

<div class="popup_bg"> 
    <div class="popup_window"> 
     <span class="popup_close"></span> 
    </div> 
</div> 

Тогда для выбора целевого родителя нажатая элемент, который можно использовать closest метод:

$(function() { 
    $(".popup_close").click(function(event) { 
     $(this).closest(".popup_bg").fadeOut(); 
     // event.stopPropagation(); 
    }); 
}); 

Обратите внимание, что в коде event является undefined вы должны передать объект события в обработчик.

+0

У меня есть мои идентификаторы уникальные, я написал это плохо tho: P - у меня разные всплывающие окна на разных сайтах;) они также помещаются в условное утверждение, не появляется одновременно (не анализируется). – Ziker

+0

@ user1515145 Хорошо, я имел в виду, что если у вас несколько элементов с одинаковыми идентификаторами, jQuery выбирает только первый элемент с этим конкретным идентификатором, регрессируя ваш вопрос, вы можете использовать 'ближайший' метод вместо нескольких' parent '. – undefined

+0

Все еще не работает, я добавил свой код к исходному вопросу, может быть, есть глупая ошибка, которую я не вижу. – Ziker

1

Добавить document.ready и/или использовать .on функции

<script type=”text/javascript”> 
    $(function(){ 
     $("#popup_close").on('click', function() { 
      $("#popup_bg").fadeOut(); 
      event.stopPropagation(); 
     }); 
    }); 
</script> 

Кроме того, идентификаторы не может повторяться в документе, используйте другой селектор, как класс

+2

хм .... не понимаю, почему этот ответ получил upvote, это не будет работать в любом случае. – Jai

+0

У меня есть мои идентификаторы уникальные, я написал это плохо tho: P - у меня разные всплывающие окна на разных сайтах;) они также помещаются в условное выражение, не появляясь одновременно (не анализируются). – Ziker

+1

@Jai, вы правы .. Я забыл добавить имя события ('click') – udidu

0

Если есть более чем один Всплывающие лучше использовать класс вместо от id.

Пример.

$(function() 
{ 
    $(".popup_close").on('click',(function() 
    { 
     $(this).parents("div.popup_bg").fadeOut(); 
    }); 
}); 

И HTML

<div class = "popup_bg"> 
    <div class = "popup_window"> 
     <span class = "popup_close"></span> 
    </div> 
</div> 
+0

У меня есть свои идентификаторы уникальные, я написал это плохо: P - у меня разные всплывающие окна на разных сайтах;) они также помещаются в условное выражение, не появляясь одновременно (не анализируются) – Ziker

0

Вам необходимо некоторое содержание в вашем пролете или установить высоту и с. Тогда вы сможете щелкнуть по нему, и он будет работать. Избегайте трюков с parent().parent(), это может сломаться, если вы измените структуру div. Как утверждают другие, используйте готовый документ jquery (читайте учебник) и используйте классы не ids, если вы собираетесь повторно использовать код (читайте учебник по CSS) ...

+0

Yup, но моя div-структура статична - она ​​всегда одна и та же :) и у нее есть контент, я просто показал структуру здесь;) – Ziker

+0

Я понимаю, но, возможно, когда-нибудь вы его измените или кто-то другой, а затем ваш скрипт будет перерыв, если вы забыли о родительских селекторах. Я называю этот хрупкий код. –

+0

Я буду иметь это в виду и использовать классы (я должен был сделать это после того, как я заработал). – Ziker

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