2022-02-18 工作记录--JS-动态创建的选择器点击事件无效的解决方法 + 【补充知识】jQuery跳转页面参数传递

JS-动态创建的选择器点击事件无效的解决方法

当我们前端用jQuery渲染数据时,可以通过append()动态添加内容,But我们会发现一个问题:当我们想 对添加内容里面的选择器绑定点击事件 时,是无效滴

example

HTML

<div class="news-list">
   <ul id="news-lists"></ul>
</div>

JS

<script src="/static/web/js/common/jquery.min.js"></script>

$(function() {
	// 富文本处理
    function showHtml(str){
      return str
          .replace(str ? /&(?!#?\w+;)/g : /&/g, '&amp;')
          .replace(/&lt;/g,"<")
          .replace(/&gt;/g,">")
          .replace(/&quot;/g,"\"")
          .replace(/&#39;/g, "\'")
          .replace(/&amp;nbsp;/g,'\u3000')
    }
    
	var html = '';
	$.ajax({
        type: 'post',
        url: "{:url('newsList')}",
        data: data,
        dataType: 'json',
        success: function (res) {
          if (res.code == 2000) {
            res.data.data.map(function (item, index) {
              html += `<li>
                    	<div class="news-img">
                      		<img src="${item.thumb}" alt=""/>
                    	</div>
                    	<div class="news-content">
                        	<ul class="title-date">
                            	<li>${item.title}</li>
                            	<li>${item.inputtime}</li>
                        	</ul>
                        	<p class="news-desc">
                            	${showHtml(item.content)}...
                        	</p>
                        	<div class="news-more" data-id="${item.id}">查看更多</div>
                    	</div>
                	</li>`          
            })
            $('#news-lists').empty().append(html);
          } else {

          }
        },
        error: function (err) {

        }
      })
}

此时,假如我们想给选择器.news-more绑定点击事件

错误写法:❌

$('要选择的元素').on('click',function(){})

只针对于页面已存在的选择器

// 点击新闻里的 查看更多按钮 携带参数跳转到newsDetail.html页面
$('.news-more').on('click',function () {
   var id = $(this).attr('data-id');
   console.log(id);

   var url = "newsDetail.html?id="+id;
   window.location.href = url;
})

正确写法:✔✌

$(document).on('click','要选择的元素',function(){})

动态创建的元素在该选择器选中范围内可以触发回调函数

// 点击新闻里的 查看更多按钮 携带参数跳转到newsDetail.html页面
$('body').on('click','.news-more',function () {
   var id = $(this).attr('data-id');
   console.log(id);

   var url = "newsDetail.html?id="+id;
   window.location.href = url;
})

【补充知识】jQuery跳转页面参数传递

newsDetail.html页面里拿到上页面跳转携带的参数id

var id = $.Request('id');

前提条件:在newsDetail.html页面里引入Getparam.js:(先要引入jquery.min.js哟)

<script src="/static/web/js/common/Getparam.js"></script>

Getparam.js代码如下:【参考自优秀滴博文

// Getparam.js
(function ($) {
  $.extend({
  
    //1、取值使用    $.Request("name")
    Request: function (name) {
      var sValue = location.search.match(new RegExp("[\?\&]" + name + "=([^\&]*)(\&?)", "i"));
      //decodeURIComponent解码
      return sValue ? decodeURIComponent(sValue[1]) : decodeURIComponent(sValue);

    },
    
    //2、给url加参数    $.UrlUpdateParams(url, "add", 11111);
    UrlUpdateParams: function (url, name, value) {
      var r = url;
      if (r != null && r != 'undefined' && r != "") {
        value = encodeURIComponent(value);
        var reg = new RegExp("(^|)" + name + "=([^&]*)(|$)");
        var tmp = name + "=" + value;
        if (url.match(reg) != null) {
          r = url.replace(eval(reg), tmp);
        } else {
          if (url.match("[\?]")) {
            r = url + "&" + tmp;
          } else {
            r = url + "?" + tmp;
          }
        }
      }
      return r;
    }

  });
})(jQuery);
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是使用 jQuery 插件 jquery-multiselect 和 jQuery 动态生成下拉框的示例代码: HTML 代码: ```html <div id="selectBoxContainer"></div> ``` JavaScript 代码: ```javascript $(document).ready(function() { // 动态生成下拉框 var selectBox = $('<select id="selectBox" multiple></select>'); selectBox.append($('<option value="option1">选项1</option>')); selectBox.append($('<option value="option2">选项2</option>')); selectBox.append($('<option value="option3">选项3</option>')); selectBox.append($('<option value="option4">选项4</option>')); selectBox.append($('<option value="option5">选项5</option>')); $('#selectBoxContainer').append(selectBox); // 初始化下拉框 $('#selectBox').multiselect(); }); ``` 在上面的示例代码中,我们首先在 HTML 中定义了一个 ID 为 "selectBoxContainer" 的容器,用于放置动态生成的下拉框。 然后,在 JavaScript 中,我们使用 jQuery 的 ready() 方法来确保文档加载完成后再执行代码。在 ready() 方法中,我们使用 jQuery 动态生成了一个 ID 为 "selectBox" 的下拉框,并设置了 multiple 属性,表示该下拉框可以多选。接着,我们为下拉框添加了五个选项。 最后,我们将动态生成的下拉框添加到容器中,并使用 multiselect() 方法初始化下拉框,从而实现了动态生成下拉框并使用 jquery-multiselect 插件实现下拉框多选的功能。 这样做的好处是可以根据实际需求动态生成下拉框,并且可以使用 jquery-multiselect 插件方便地实现下拉框多选的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呀小萝卜儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值