2017-07-16 89 views
0

我正在尋找如何簡化我的jQuery代碼並避免重複的幫助。我知道這可以通過使用OOP來實現,但我沒有足夠的知識如何正確執行此操作。有沒有辦法避免body.on('點擊')重複?如何優化這個jQuery代碼?

這裏是我的JavaScript代碼:(更新)

jQuery(document).ready(function($) { 

    /* WordPress Media Uploader 
    -------------------------------------------------------*/ 
    function upload(type) { 

    if (mediaUploader) { 
     mediaUploader.open(); 
    } 

    var mediaUploader = wp.media.frames.file_frame = wp.media({ 
     title: 'Select an Image', 
     button: { 
     text: 'Use This Image' 
     }, 
     multiple: false 
    }); 

    mediaUploader.on('select', function() { 
     var attachment = mediaUploader.state().get('selection').first().toJSON(); 
     console.log(attachment); 
     $('.deo-' + type + '-hidden-input').val(attachment.url); 
     $('.deo-' + type + '-media').attr('src', attachment.url); 
    }); 

    mediaUploader.open(); 

    } 

    $('body').on('click', '.deo-image-upload-button', function() { 
    upload('image'); 
    }); 

    $('body').on('click', '.deo-signature-upload-button', function() { 
    upload('signature'); 
    }); 

    $('body').on('click', '.deo-image-delete-button', function(e) { 
    $('.deo-image-hidden-input').val(''); 
    $('.deo-image-media').attr('src', ''); 
    }); 

    $('body').on('click', '.deo-signature-delete-button', function(e) { 
    $('.deo-signature-hidden-input').val(''); 
    $('.deo-signature-media').attr('src', ''); 
    }); 

}); 
+0

創建功能,如'函數上傳(型)'與'上傳調用(」圖像')'或'上傳'('簽名')',必要時將其連接到類中。 –

+0

謝謝:)我更新了我的代碼,有沒有辦法改進** $('body')。on('click')**重複? – Alexander

回答

1

你可以在這樣的單擊事件減少,

$('body').on('click', '.deo-image-upload-button, .deo-signature-upload-button, .deo-image-delete-button, .deo-signature-delete-button', function() { 
    if ($(this).hasClass('deo-image-upload-button')) { 
     upload('image'); 
    } else if ($(this).hasClass('deo-signature-upload-button')) { 
     upload('signature'); 
    } else if ($(this).hasClass('deo-image-delete-button')) { 
     $('.deo-image-hidden-input').val(''); 
     $('.deo-image-media').attr('src', ''); 
    } else if ($(this).hasClass('deo-signature-delete-button')) { 
     $('.deo-signature-hidden-input').val(''); 
     $('.deo-signature-media').attr('src', ''); 
    } 
    }); 

這裏是一個Fiddle您測試

+0

它的工作:)不知道有可能通過這麼多類來點擊活動:) – Alexander

+0

高興地幫助:) –

1

我用屬性選擇 「合併」 相似的功能。

它沒有測試,但應該工作。

jQuery(document).ready(function($) { 

    /* WordPress Media Uploader 
    -------------------------------------------------------*/ 
    var imgSign = ""; 
    var attachment; 

    mediaUploader.on('select', function() { 
    attachment = mediaUploader.state().get('selection').first().toJSON(); 
    console.log(attachment); 
    $('.deo-'+imgSign+'-hidden-input').val(attachment.url); 
    $('.deo-'+imgSign+'-media').attr('src', attachment.url); 
    }); 

    // Image or signature click 
    $('body').on('click', '[class*="-upload-button"]', function(e) { 
    e.preventDefault(); 

    $(this).hasClass("deo-image-upload-button") ? imgSign = "image" : imgSign = "signature"; 

    if (mediaUploader) { 
     mediaUploader.open(); 
    } 

    // Empty attachements. 
    attachment = ""; 
    var mediaUploader = wp.media.frames.file_frame = wp.media({ 
     title: 'Select an Image', 
     button: { 
     text: 'Use This Image' 
     }, 
     multiple: false 
    }); 



    mediaUploader.open(); 
    }); 

    // Image or signature delete 
    $('body').on('click', '[class*="-delete-button"]', function(e) { 
    $(this).hasClass("deo-image-delete-button") ? imgSign = "image" : imgSign = "signature"; 
    $('.deo-'+imgSign+'-hidden-input').val(''); 
    $('.deo-'+imgSign+'-media').attr('src', ''); 
    }); 

}); 

我不知道mediaUploader.open(); ...經常調用它真的有用嗎?

+0

謝謝。但是我在控制檯_Uncaught SyntaxError:Unexpected token?_中出錯。可能是因爲WordPress使用jQuery 1.4.1。 – Alexander

+0

mmm ...我認爲這是我的壞...我刪除了三元運營商的「if」和括號。 –

+0

它實際上是有效的,但是每次點擊上傳按鈕時它會在** attachment **變量中創建越來越多的對象:)所以第一次它是一個對象,5次點擊後它是5個對象。每次點擊按鈕並選擇圖像時,檢查我上面更新的代碼是否存儲1個對象。這就是WordPress的工作原理:) – Alexander