javascript - js中ajax请求数据之后的click事件失效问题
我有一个数据列表,列表中有点击展开效果。由于这个数据列表用到了ajax
加载,就是ajax
加载之后的click
时间不起作用了,希望各位大神帮忙看看。
这是html
中的数据结构和页面布局
<code><div class="con-list"> <div class="list-data"> <div class="list-data-detail"> <p class="no-open">消费者的信息会逐渐增多,如果有一个厂家,用更好的原料和工艺,就会迅速占领市场</p> <p> </p> <p><span>时间:2016-05-24</span> | <span>来源:本站</span> <a href="javascript:(0)" class="open-detail" data-id="1603">展开</a></p> </div> <div class="list-data-detail"> <p class="no-open">消费者的信息会逐渐增多,如果有一个厂家,用更好的原料和工艺,就会迅速占领市场</p> <p> </p> <p><span>时间:2016-05-24</span> | <span>来源:本站</span> <a href="javascript:(0)" class="open-detail" data-id="1621">展开</a></p> </div> <div class="list-data-detail"> <p class="no-open">消费者的信息会逐渐增多,如果有一个厂家,用更好的原料和工艺,就会迅速占领市场</p> <p> </p> <p><span>时间:2016-05-24</span> | <span>来源:本站</span> <a href="javascript:(0)" class="open-detail" data-id="1625">展开</a></p> </div> <div class="list-data-detail"> <p class="no-open">消费者的信息会逐渐增多,如果有一个厂家,用更好的原料和工艺,就会迅速占领市场</p> <p> </p> <p><span>时间:2016-05-24</span> | <span>来源:本站</span> <a href="javascript:(0)" class="open-detail" data-id="1633">展开</a></p> </div> </div> <div class="list-data html-hide"></div> </div></code>
js
中的展开click
事件和ajax
请求如下
<code><script> ;(function($){ //打开 $('.open-detail').click(function(){ $(this).parent().siblings('p[class="no-open"]').addClass('yes-open'); $(this).text('收起'); $(this).attr('class', 'close-detail'); }); //收起 $('.close-detail').click(function(){ $(this).parent().siblings('p[class="yes-open"]').addClass('no-open'); $(this).text('展开'); $(this).attr('class', 'open-detail'); }); // }); function getAjaxList(_v, _c, _t){ $.ajax({ url : './ajax.php?op='+_v, type : 'post', dataType : 'json', data : {'category':_c, 'template':_t}, success : function(msg){ if(msg.status == 1){ $('.html-hide').html(msg.html); $('.html-hide').siblings('div').hide(); $('.html-hide').show(); } else { $('.list-data').html('此处无您要的信息,到最新动态去看看吧'); } } }); } </script></code>
php
中的div
设置及数据设置
<code><?php ... ... ... foreach ($variable as $key => $value) { $html .='<div class="list-data-detail">'; $html .='<p class="no-open">'.$value['desc'].'</p> <p>'; $html .='</p> <p><span>时间:'.date('Y-m-d', $value['updateTime']).'</span> | <span>来源:'.$value['author'].'</span> <a href="javascript:(0)" class="open-detail" data-id="'.$value['aid'].'">展开</a></p>'; $html .='</div>'; } $result['html'] = $html; exit(json_encode($result));</code>
我在php
中div
中的样式都加了啊!可就是不行。
回复内容:
我有一个数据列表,列表中有点击展开效果。由于这个数据列表用到了ajax
加载,就是ajax
加载之后的click
时间不起作用了,希望各位大神帮忙看看。
这是html
中的数据结构和页面布局
<code><div class="con-list"> <div class="list-data"> <div class="list-data-detail"> <p class="no-open">消费者的信息会逐渐增多,如果有一个厂家,用更好的原料和工艺,就会迅速占领市场</p> <p> </p> <p><span>时间:2016-05-24</span> | <span>来源:本站</span> <a href="javascript:(0)" class="open-detail" data-id="1603">展开</a></p> </div> <div class="list-data-detail"> <p class="no-open">消费者的信息会逐渐增多,如果有一个厂家,用更好的原料和工艺,就会迅速占领市场</p> <p> </p> <p><span>时间:2016-05-24</span> | <span>来源:本站</span> <a href="javascript:(0)" class="open-detail" data-id="1621">展开</a></p> </div> <div class="list-data-detail"> <p class="no-open">消费者的信息会逐渐增多,如果有一个厂家,用更好的原料和工艺,就会迅速占领市场</p> <p> </p> <p><span>时间:2016-05-24</span> | <span>来源:本站</span> <a href="javascript:(0)" class="open-detail" data-id="1625">展开</a></p> </div> <div class="list-data-detail"> <p class="no-open">消费者的信息会逐渐增多,如果有一个厂家,用更好的原料和工艺,就会迅速占领市场</p> <p> </p> <p><span>时间:2016-05-24</span> | <span>来源:本站</span> <a href="javascript:(0)" class="open-detail" data-id="1633">展开</a></p> </div> </div> <div class="list-data html-hide"></div> </div></code>
js
中的展开click
事件和ajax
请求如下
<code><script> ;(function($){ //打开 $('.open-detail').click(function(){ $(this).parent().siblings('p[class="no-open"]').addClass('yes-open'); $(this).text('收起'); $(this).attr('class', 'close-detail'); }); //收起 $('.close-detail').click(function(){ $(this).parent().siblings('p[class="yes-open"]').addClass('no-open'); $(this).text('展开'); $(this).attr('class', 'open-detail'); }); // }); function getAjaxList(_v, _c, _t){ $.ajax({ url : './ajax.php?op='+_v, type : 'post', dataType : 'json', data : {'category':_c, 'template':_t}, success : function(msg){ if(msg.status == 1){ $('.html-hide').html(msg.html); $('.html-hide').siblings('div').hide(); $('.html-hide').show(); } else { $('.list-data').html('此处无您要的信息,到最新动态去看看吧'); } } }); } </script></code>
php
中的div
设置及数据设置
<code><?php ... ... ... foreach ($variable as $key => $value) { $html .='<div class="list-data-detail">'; $html .='<p class="no-open">'.$value['desc'].'</p> <p>'; $html .='</p> <p><span>时间:'.date('Y-m-d', $value['updateTime']).'</span> | <span>来源:'.$value['author'].'</span> <a href="javascript:(0)" class="open-detail" data-id="'.$value['aid'].'">展开</a></p>'; $html .='</div>'; } $result['html'] = $html; exit(json_encode($result));</code>
我在php
中div
中的样式都加了啊!可就是不行。
谢谢邀请。我之前也遇到这种类似的问题,也是ajax()
加载完的数据导致原来加的效果失效。如下是我的处理方式
<code>// 初始化数据的时候我也是这么写的 $('.message-but').click(function(){ // code... }); // ajax加载后click事件不执行,又改成这样 $('.message-but').live("click",function(){ // code... });</code>
之后通过网上查询才知道这个live()
其实和bind()
差不多一样用,都是可以给未来元素绑定对应的触发事件,但是二者还是有区别的。两者你都试试看,希望对你有帮助
在jquery1.9+之后就没有live方法了
jQuery1.9之前的版本我们可以这样写:
<code>$("a").live("focus",function(){ this.blur(); }); </code>
jQuery1.9之后由于live被删除了,所以应该这样写:
<code>$(document).on("focus","a",function(){ this.blur(); }); </code>
我大致看了一下,如果你的每个list-data-detail
都是通过Ajax动态加载出来的,那么你开始直接写的click
事件是无法起作用的,以为你的事件绑定的时候这个DOM并不存在。
这时候,你需要使用事件委托
,在jQuery
里,也就是
$('.list-data').on('click', '.open-detail', function() { /// here goes the code });
这样就行了。通过事件委托,将子元素的事件绑定到父元素上,子元素被点击之后,事件会冒泡到父元素,由父元素负责捕捉然后触发事件。
动态加载的元素要执行点击可以这样
<code>$(document).on('click','.message-but',function(){ // code... });</code>

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.
