首先是在普通文檔(也就是單個html文件中進行測試,能夠正常執行)
普通情況下的結果,拼接的結果能夠正常渲染並且控制台有輸出;
但是在vue環境之下就會出錯,點擊事件並沒有反應,
js部分:
for (const i in _sourcesName) { let liHtml = ""; for (const j in _sourcesName[i]) { liHtml += '<li class="dataLi">'; liHtml += '<p>' + _sourcesName[i][j] + '(' + _sourcesRoundNum[i][j] + ')' + '</p>'; liHtml += '<span>最近更新: ' + _sourcesTime[i][j] + '</span>'; liHtml += '</li>'; } if (i == 0) { $("#list0").append(liHtml); } else if (i == 1) { $("#list1").append(liHtml); } else if (i == 2) { $("#list2").append(liHtml); } else if (i == 3) { $("#list3").append(liHtml); } else if (i == 4) { $("#list4").append(liHtml); } }
/**點擊li下面的p獲取不同表格信息 */ showList() { console.log("1111"); const _this = this; // $(".dataLi p").click(function() { // _this.open3(); // console.log("點擊獲取列表"); // }); $(".dataLi").on("click","p",function(){ console.log("點擊獲取列表"); }); // let tabList = $("#tab"); // tabList.css("display", "block"); // this.DQZY= },
template部分
<ul class="listUl" id="list3"></ul>
結果是頁面可以渲染,但是事件不會成功,能夠進入輸出“1111”,但是點擊事件沒有進入,我覺得應該是渲染的時間問題,目前還沒有解決。
后期思考:
append中的節點是在整個文檔加載完之后開始添加,頁面不會為append的元素初始化添加點擊事件;
頁面並不會為未來的元素初始化添加點擊事件,所以使用這種方式動態添加的節點中的點擊事件沒有生效。
在這里提供兩種方法:
1.采用
$(document).on("click", ".dataLi p", function(index,$event)代替
$(".dataLi p").click(function(index,$event)
$(document).on("click", ".dataLi p", function(index,$event) // $(".dataLi p").click(function(index,$event) { this.current=index; //獲取點擊對象 var el = event.currentTarget; // alert("當前對象的內容:"+el.innerHTML); console.log(el.innerHTML); _this.DQZY =el.innerHTML; });
2.vue自帶的@click(v-on:click)是無法實現的,采用js原本的onclick="showList(event,this)事件
for (const j in _sourcesName[i]) { liHtml += '<li class="dataLi">'; liHtml += '<p onclick="showList(event,this)">' + _sourcesName[i][j] + "</p>"; liHtml += ' <span class="span1">(' + _sourcesRoundNum[i][j] + ") </span><br>"; liHtml += '<span class="span2">最近更新: ' + _sourcesTime[i][j] + "</span>"; liHtml += "</li>"; }
window.showList = function(event, el) { console.log("1111"); console.log(event, el); _this.DQZY = el.innerHTML; };