貌似h5標記有click等事件的監聽,沒有show,hide等事件的監聽。用了一個tab樣式庫,想實現切換tab時刷新頁面數據,這個庫也沒說明招接口也不好找。看到他是在div的class屬性上面addClass("active show"),removeClass("active show"),來實現切換時的隱藏和顯示的。於是就想有沒有監聽class改變的方法,百度到 MutationObserver
用示例代碼測試了一下,果真可以。
<script>
$(document).ready(function(){
var targetNode = document.getElementById('article-original-review').parentNode;
var config = { attributes: true };
var callback = function(mutationsList) {
for(var mutation of mutationsList) {
if (mutation.type == 'attributes') {
if($(targetNode).hasClass("active")){
setTimeout(function(){ getlist()},100);
}
}
}
};
var observer = new MutationObserver(callback);
observer.observe(targetNode, config);
});
function getlist(){
var newidolurl = "/api/private/";
$.ajax({
type: "POST", //data 傳送數據類型。post 傳遞
dataType: 'json', // 返回數據的數據類型json
contentType: "application/json; charset=utf-8",
url: newidolurl, // yii 控制器/方法
cache: false,
data: JSON.stringify({action:'original-review-list'}), //傳送的數據
error:function(res){
alert("數據傳輸錯誤");
},success: function (data) {
if(data.status == 0){
}else{
alert(data.msg);
}
}
})
}
</script>
測試tab點擊切換按鈕時,果真觸發了ajax請求。但是有個問題,爲啥連續觸發兩次啊。後來想一想難道時addClass("active show") 兩個屬性就觸發兩次,搞不懂啊。找不到原因也要解決阿。於是引入setTimeout來過濾重複請求。代碼如下:
<script>
$(document).ready(function(){
var targetNode = document.getElementById('article-original-review').parentNode;
var config = { attributes: true };
var idTimeout = 0;
var callback = function(mutationsList) {
for(var mutation of mutationsList) {
if (mutation.type == 'attributes') {
clearTimeout(idTimeout)
if($(targetNode).hasClass("active")){
idTimeout = setTimeout(function(){ getlist()},100);
}
}
}
};
var observer = new MutationObserver(callback);
observer.observe(targetNode, config);
});
function getlist(){
var newidolurl = "/api/private/";
$.ajax({
type: "POST", //data 傳送數據類型。post 傳遞
dataType: 'json', // 返回數據的數據類型json
contentType: "application/json; charset=utf-8",
url: newidolurl, // yii 控制器/方法
cache: false,
data: JSON.stringify({action:'original-review-list'}), //傳送的數據
error:function(res){
alert("數據傳輸錯誤");
},success: function (data) {
if(data.status == 0){
}else{
alert(data.msg);
}
}
})
}
</script>
ok,搞定,僅作記錄。