jquery live()

Если Вы совсем новичок и слабо представляете себе возможности jQuery, не можете понять в каком форуме задать свой вопрос - Вам сюда.

Модераторы: TRAHOMOTO, tuareg, Gennady

jquery live()

Сообщение nike__ » 20 фев 2010, 14:52

Доброго времени суток ,у меня возник вопрос по поводу jquery .
Ссылку получаю AJAX'ом.Далее вешаю на нее событие открытия fancybox'a
Код: выделить все
<script language="javascript">
$(document).ready(function(){
$("a.basket").live("click",function(event){
event.preventDefault();
$(this).fancybox(
  {
     autoDimensions:false,
   'width'   : 500,
   'height': 650,
   ajax:
   {
   data:"do=basket"
   }
});
});
});

Вообщем код работает ,но почему то при первом нажатии на ссылку ничего не происходит , при следующих нажатиях все нормально .
Помогите разобратся , зарание благодарю.
nike__
 
Сообщений: 26
Зарегистрирован: 20 фев 2010, 14:28

Re: jquery live()

Сообщение Nekromancer » 20 фев 2010, 14:55

Код: выделить все
event.preventDefault();


в конец события засунь..
Web is the future ...
Аватар пользователя
Nekromancer
Модератор
 
Сообщений: 419
Зарегистрирован: 19 янв 2010, 15:06
Откуда: Молдова

Re: jquery live()

Сообщение nike__ » 20 фев 2010, 15:02

Код: выделить все
$(document).ready(function(){
$("a.basket").live("click",function(event){

$(this).fancybox(
  {
     autoDimensions:false,
   'width'   : 500,
   'height': 650,
   ajax:
   {
   data:"do=basket"
   }
});
event.preventDefault();
});

});

Попробовал так , всёрано тоже самое :?
nike__
 
Сообщений: 26
Зарегистрирован: 20 фев 2010, 14:28

Re: jquery live()

Сообщение Gennady » 20 фев 2010, 22:50

Вопрос конечно интерееееесный..... Если честно, на теоретические изыскания по поводу причины нет ни капли времени. Но как "забодать" проблему подскажу :D Добавьте вызов события click - вот примерно так:
Код: выделить все
<script type="text/javascript">
$(document).ready(function() {
   $("a.basket").live("click", function(event) {
      $(this).fancybox({
         autoDimensions:false,
         width:500, height:650,
         ajax:{data:"do=basket"}
      });
   event.preventDefault();
   }).click();
});
</script>
Долог путь поучения, короток и успешен путь примеров (Сенека).
I'm a member of jQuery Meetups. jQuery users unite! Connect with other jQuery users... Присоединиться к jQuery Russia.
Аватар пользователя
Gennady
Администратор
 
Сообщений: 1886
Зарегистрирован: 14 янв 2010, 14:36
Откуда: Москва

Re: jquery live()

Сообщение Nekromancer » 21 фев 2010, 00:11

а вообще, зачем лайв? если обработчик вешается когда объект уже есть.. а не потом..
Web is the future ...
Аватар пользователя
Nekromancer
Модератор
 
Сообщений: 419
Зарегистрирован: 19 янв 2010, 15:06
Откуда: Молдова

Re: jquery live()

Сообщение nike__ » 21 фев 2010, 01:51

Gennady писал(а):Вопрос конечно интерееееесный..... Если честно, на теоретические изыскания по поводу причины нет ни капли времени. Но как "забодать" проблему подскажу :D Добавьте вызов события click - вот примерно так:

Чёт не вышло ее "забодать")))
Такой же ефект как и при моем коде
Nekromancer писал(а):а вообще, зачем лайв? если обработчик вешается когда объект уже есть.. а не потом..

Незнаю) вообщем ссылку я получаю аяксом, так как оно не работало посчитал что нужно live использовать, если есть способ вызвать фенсибокс другим способом , просветите , я с JS не очень дружу)
nike__
 
Сообщений: 26
Зарегистрирован: 20 фев 2010, 14:28

Re: jquery live()

Сообщение Nekromancer » 21 фев 2010, 11:42

я не знаю, что это за плагин.. но ссылка у вас явно есть в документе, до того как нужно загрузить этот "бокс", или нет? а уже после нажатия на неё он загружается..
Опишите ситуацию чтоле :? так, для понимания
Web is the future ...
Аватар пользователя
Nekromancer
Модератор
 
Сообщений: 419
Зарегистрирован: 19 янв 2010, 15:06
Откуда: Молдова

Re: jquery live()

Сообщение nike__ » 21 фев 2010, 12:16

Код странички:
Код: выделить все
<body>
<div id="title">Шапка</div>

<div id="content">
<!--Центер-->  <div id="main">{path}{info}{cats}{goods}{content}</div>
<!--Левый-->  <div id="sections"></div>
<!--Правый --> <div id="news">
<!-- block menu-left BEGIN -->
   <table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td class="ltopedge"></td>
    <td class="topside"></td>
    <td class="rtopedge"></td>
  </tr>
  <tr>
    <td class="lside"></td>
    <td class="blockbody">{login}</td>
    <td class="rside"></td>
  </tr>
  <tr>
    <td class="ldownedge";></td>
    <td class="downside"></td>
    <td class="rdownedge"></td>
  </tr>
</table>
<!-- block menu-left END -->
<br /><br /><br />
  <!-- block menu-left BEGIN -->
   <table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td class="ltopedge"></td>
    <td class="topside"></td>
    <td class="rtopedge"></td>
  </tr>
  <tr>
    <td class="lside"></td>
    <td class="blockbody">{basket}</td><!-- Сюда посредством аякса вставляет блок со ссылкой-->
    <td class="rside"></td>
  </tr>
  <tr>
    <td class="ldownedge";></td>
    <td class="downside"></td>
    <td class="rdownedge"></td>
  </tr>
</table>
<!-- block menu-left END -->
</div>
</div>
<script type="text/javascript">
$(document).ready(function() {
   $("a.basket").live("click", function(event) {
      $(this).fancybox({
         autoDimensions:false,
         width:500, height:650,
         ajax:{data:"do=basket"}
      });
   event.preventDefault();
   }).click();
});
</script>
<div id="meta">Подвал</div>
</body>

Ответ сервера со ссылкой на которую привинчен лайв
Код: выделить все
   header('Content-Type: text/xml');
   header('Pragma: no-cache');
   echo '<?xml version="1.0" encoding="cp1251"?>';
   echo '<result><![CDATA[';
   if ($_SESSION[uid])
      {
      $db->query_db("SELECT * FROM ".db_prefix."basket WHERE uid='".$_SESSION[uid]."'");
      while($row=$db->get_array())
         {
         echo $row['name']." --x".$row['count']."-- ".$row['price']."<br>";
         $fullprice+=$price;
         }
         echo $fullprice;
         echo "<br><a  href='/engine/ajax/ajax_kernel.php'  class='basket'>Подробней</a><a href='#'>Купить</a>";
      }
   else
      {
      $basket=$_SESSION[basket];
      foreach($basket as $k)
         {
         extract($k);
         echo $name." --x".$count."-- ".$price."<br>";
         $fullprice+=$price;
         }
         echo $fullprice;
         echo "<br><a  href='/engine/ajax/ajax_kernel.php'  class='basket'>Подробней</a> <a href='#'>Купить</a>";
      }   
   echo "]]></result>";
   }

При отработке php скрипта выше на стьраничку средствами ajax добавляется блок со ссылкой <a href='/engine/ajax/ajax_kernel.php' class='basket'>Подробней</a> при нажатии на которую нужно выводить бокс.Надеюсь понятно обьяснил :)
nike__
 
Сообщений: 26
Зарегистрирован: 20 фев 2010, 14:28

Re: jquery live()

Сообщение Nekromancer » 21 фев 2010, 20:52

Если честно, даже не представляю в чём проблема. По идее должно правильно работать :) но раз прошлое решение работает:)) хорошо
Web is the future ...
Аватар пользователя
Nekromancer
Модератор
 
Сообщений: 419
Зарегистрирован: 19 янв 2010, 15:06
Откуда: Молдова

Re: jquery live()

Сообщение nike__ » 22 фев 2010, 12:04

Оно то работает всё но после получение ссылки аяксом она срабатывает только после 2-го нажатия ,а дальше все отлично с первого клика открывает бокс.Что с етой фигней делать ума не приложу :twisted:
nike__
 
Сообщений: 26
Зарегистрирован: 20 фев 2010, 14:28


Вернуться в Вопросы от совсем новичков

Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 6