2016-03-16 60 views
-1

我編寫下面的代碼,兩者之間的差異是選擇器,所以如何在少代碼中重用相似的方法?如何使用工廠功能?如何在不同的選擇器中重用jQuery代碼?

$(".tc_banzhu").click(function() { 
    $(".banzhuDon").fadeIn(200); 
    //get the width and height of the dialog 
    var tc_hgt = $(".banzhuDon .popup_box").height()/2; 
    var tc_wid = $(".banzhuDon .popup_box").width()/2; 
    $(".banzhuDon.popup_box").css({ 
    marginLeft: tc_wid * -1 + "px", 
    marginTop: tc_hgt * -1 + "px" 
    }); 
}); 
$(".tc_ban").click(function() { 
    $(".banDon").fadeIn(200); 
    var tc_hgt = $(".banDon .popup_box").height()/2; 
    var tc_wid = $(".banDon .popup_box").width()/2; 
    $(".banDon.popup_box").css({ 
    marginLeft: tc_wid * -1 + "px", 
    marginTop: tc_hgt * -1 + "px" 
    }); 
}); 
$(".tc_banner").click(function() { 
    $(".bannerDon").fadeIn(200); 
    var tc_hgt = $(".bannerDon .popup_box").height()/2; 
    var tc_wid = $(".bannerDon .popup_box").width()/2; 
    $(".bannerDon.popup_box").css({ 
    marginLeft: tc_wid * -1 + "px", 
    marginTop: tc_hgt * -1 + "px" 
    }); 
}); 
+0

請讓我知道,如果我的回答是行不通的。 http://stackoverflow.com/a/36036587/4763793 –

+0

我把代碼放在https://jsbin.com/pebuma/edit?html,css,js,console,output 其實我沒有設置對話框的高度值,marginTop:tc_hgt * -1 +「px」不起作用,無論如何,非常感謝。 –

回答

0

使用函數表達式點擊回調函數:

var action = function(e) { 
    $(e).fadeIn(200); 
    var tc_hgt = $(e).find(".popup_box").height()/2; 
    var tc_wid = $(e).find(".popup_box").width()/2; 
    if ($(e).hasClass(".popup_box")) $(e).css({marginLeft: tc_wid * -1 + "px", marginTop: tc_hgt * -1 + "px"}); 
};  

$(".tc_banzhu, .tc_ban, .tc_banner").click(function() { 
    action(this); 
}); 
+0

「.pop_box」不是「.tc_banzhu,.tc_ban,.tc_banner」的孩子,我寫這樣的

並將它們設置在HTML頁面的末尾,當我點擊一個按鈕時,顯示的對話框就會匹配。 –

+0

已實現hasClass檢查元素是否有「.pop_box」類。 – Artifex404

相關問題