简体   繁体   English

Javascript上传按钮问题,适用于Wordpress

[英]Javascript upload button issue, for Wordpress

I am working on a WordPress theme, with a theme options page that contains an infinite slides generator, each slide contains few fields and an upload button, to upload images to each slide. 我正在研究一个WordPress主题,其主题选项页面包含一个无限的幻灯片生成器,每个幻灯片包含几个字段和一个上传按钮,用于将图像上传到每个幻灯片。 The problem is that the upload button doesn't work. 问题是上传按钮不起作用。 As you can see the upload button has class="image_upload_button" 如您所见,上传按钮具有class =“ image_upload_button”

function pixy_admin_head() { 
$data = get_option(OPTIONS); ?>
<script type="text/javascript" language="javascript">

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


    //AJAX Upload
        $('.image_upload_button').each(function() {
        var clickedObject = $(this);
        var clickedID = $(this).attr('id');     
        var nonce = $('#security').val();

        new AjaxUpload(clickedID, {
            action: ajaxurl,
            name: clickedID, // File upload name
            data: { // Additional data to send
                action: 'pixy_ajax_post_action',
                type: 'upload',
                security: nonce,
                data: clickedID },
            autoSubmit: true, // Submit file after selection
            responseType: false,
            onChange: function(file, extension) {},
            onSubmit: function(file, extension) {
                clickedObject.text('Uploading'); // change button text, when user selects file  
                this.disable(); // If you want to allow uploading only 1 file at time, you can disable upload button
                interval = window.setInterval(function() {
                    var text = clickedObject.text();
                    if (text.length < 13) { clickedObject.text(text + '.'); }
                    else { clickedObject.text('Uploading'); } 
                    }, 200);
            },
            onComplete: function(file, response) {
                window.clearInterval(interval);
                clickedObject.text('Upload Image'); 
                this.enable(); // enable upload button


                // If nonce fails
                if(response==-1) {
                    var fail_popup = $('#pixy-popup-fail');
                    fail_popup.fadeIn();
                    window.setTimeout(function() {
                    fail_popup.fadeOut();                        
                    }, 2000);
                }

                // If there was an error
                else if(response.search('Upload Error') > -1) {
                    var buildReturn = '<span class="upload-error">' + response + '</span>';
                    $(".upload-error").remove();
                    clickedObject.parent().after(buildReturn);

                    }

                else {
                    var buildReturn = '<img class="hide pixy-option-image" id="image_'+clickedID+'" src="'+response+'" alt="" />';

                    $(".upload-error").remove();
                    $("#image_" + clickedID).remove();  
                    clickedObject.parent().after(buildReturn);
                    $('img#image_'+clickedID).fadeIn();
                    clickedObject.next('span').fadeIn();
                    clickedObject.parent().prev('input').val(response);
                }
            }
        });

        });


        });         


            //Add new slide
$(".slide_add_button").live('click', function(){        
    var slidesContainer = $(this).prev();
    var sliderId = slidesContainer.attr('id');
    var sliderInt = $('#'+sliderId).attr('rel');

    var numArr = $('#'+sliderId +' li').find('.order').map(function() { 
        var str = this.id; 
        str = str.replace(/\D/g,'');
        str = parseFloat(str);
        return str;         
    }).get();

    var maxNum = Math.max.apply(Math, numArr);
    if (maxNum < 1 ) { maxNum = 0};
    var newNum = maxNum + 1;

    var newSlide = '<li class="temphide"><div class="slide_header"><strong>Slide ' + newNum + '</strong><input type="hidden" class="slide pixy-input order" name="' + sliderId + '[' + newNum + '][order]" id="' + sliderId + '_slide_order-' + newNum + '" value="' + newNum + '"><a class="slide_edit_button" href="#">Edit</a></div><div class="slide_body" style="display: none; "><label>Slide Type</label><div class="slide pixy-checkbox"><input class="slide pixy-radio pixy-slider-type" name="' + sliderId + '[' + newNum + '][type]" type="radio" value="html"><div>HTML Slide</div><input class="slide pixy-radio pixy-slider-type" name="' + sliderId + '[' + newNum + '][type]"  type="radio" value="video"><div>Video/ Image Wide Slide</div></div><label>Slide Title</label><input class="slide pixy-input pixy-slider-title" name="' + sliderId + '[' + newNum + '][title]" id="' + sliderId + '_' + newNum + '_slide_title" value=""><label>Slide Description</label><input class="slide pixy-input" name="' + sliderId + '[' + newNum + '][desc]" id="' + sliderId + '_' + newNum + '_slide_desc" value=""><label>Add Slide Background Image. Enter URL or Upload.</label><input class="slide pixy-input" name="' + sliderId + '[' + newNum + '][url]" id="' + sliderId + '_' + newNum + '_slide_url" value="" /><div class="upload_button_div"><span class="button image_upload_button" id="' + sliderId + '_' + newNum + '">Upload</span><span class="button image_reset_button hide" id="reset_' + sliderId + '_' + newNum + '" title="' + sliderId + '_' + newNum + '">Remove</span></div><div class="screenshot"></div><label>Slide Content</label><textarea class="slide pixy-input" name="' + sliderId + '[' + newNum + '][content]" id="' + sliderId + '_' + newNum + '_slide_content" cols="8" rows="8"></textarea><a class="slide_delete_button" href="#">Delete</a><div class="clear"></div></div></li>';

    slidesContainer.append(newSlide);
    $('.temphide').fadeIn('fast', function() {
        $(this).removeClass('temphide');
    });

    return false;
}); 

    }); //end doc ready

When I generate the slide with "Add New Slide" button, class="slide_add_button", it is generated by jQuery (*see "var newSlide" above, and the upload button class="image_upload_button"), and if I save the options and I refresh the page it is regenerated py a PHP code that works. 当我使用“添加新幻灯片”按钮class =“ slide_add_button”生成幻灯片时,它是由jQuery生成的(*请参见上面的“ var newSlide”,以及上传按钮class =“ image_upload_button”),如果我保存了这些选项我刷新了页面,然后重新生成了一个有效的PHP代码。

The PHP code: PHP代码:

    public static function optionsframework_slider_function($id,$std,$oldorder,$order,$int){
        $data = get_option(OPTIONS);

        $slider = '';
        $slide = array();
        $slide = $data[$id];

        if (isset($slide[$oldorder])) { $val = $slide[$oldorder]; } else {$val = $std;}
        //initialize all vars
        $slidevars = array('type', 'title', 'desc', 'url', 'content');
        foreach ($slidevars as $slidevar) {
            if (!isset($val[$slidevar])) {
                $val[$slidevar] = '';
            }
        }
        //begin slider interface    
        if (!empty($val['title'])) {
            $slider .= '<li><div class="slide_header"><strong>'.stripslashes($val['title']).'</strong>';
        } else {
            $slider .= '<li><div class="slide_header"><strong>Slide '.$order.'</strong>';
        }
        $slider .= '<input type="hidden" class="slide pixy-input order" name="'. $id .'['.$order.'][order]" id="'. $id.'_'.$order .'_slide_order" value="'.$order.'" />';
        $slider .= '<a class="slide_edit_button" href="#">Edit</a></div>';
        $slider .= '<div class="slide_body">';
        $slider .= '<label>Slide Type</label>';
        $slider .= '<div class="slide pixy-checkbox">';
        $slider .= '<input class="slide pixy-radio pixy-slider-type" name="'. $id .'['.$order.'][type]"  type="radio" value="html"';
        if($val['type'] == 'html'){ $slider .= 'checked="checked">'; } else { $slider .= '>'; }
        $slider .= '<div>HTML Slide</div>';
        $slider .= '<input class="slide pixy-radio pixy-slider-type" name="'. $id .'['.$order.'][type]" type="radio" value="video"';
        if($val['type'] == 'video'){ $slider .= 'checked="checked">'; } else { $slider .= '>'; }       
        $slider .= '<div>Video/ Image Wide Slide</div>';
        $slider .= '</div>';
        $slider .= '<label>Slide Title</label>';
        $slider .= '<input class="slide pixy-input pixy-slider-title" name="'. $id .'['.$order.'][title]" id="'. $id .'_'.$order .'_slide_title" value="'. stripslashes($val['title']) .'" />';
        $slider .= '<label>Slide Description</label>';
        $slider .= '<input class="slide pixy-input" name="'. $id .'['.$order.'][desc]" id="'. $id .'_'.$order .'_slide_desc" value="'. $val['desc'] .'" />';



        $slider .= '<label>Add Slide Background Image. Enter URL or Upload.</label>';
        $slider .= '<input class="slide pixy-input" name="'. $id .'['.$order.'][url]" id="'. $id .'_'.$order .'_slide_url" value="'. $val['url'] .'" />';
        $slider .= '<div class="upload_button_div"><span class="button image_upload_button" id="'.$id.'_'.$order .'">Upload</span>';
        if(!empty($val['url'])) {$hide = '';} else { $hide = 'hide';}
        $slider .= '<span class="button image_reset_button '. $hide.'" id="reset_'. $id .'_'.$order .'" title="' . $id . '_'.$order .'">Remove</span>';
        $slider .='</div>' . "\n";
        $slider .= '<div class="screenshot">';
        if(!empty($val['url'])){
            $slider .= '<a class="pixy-uploaded-image" href="'. $val['url'] . '">';
            $slider .= '<img class="pixy-option-image" id="image_'.$id.'_'.$order .'" src="'.$val['url'].'" alt="" />';
            $slider .= '</a>';
            }
        $slider .= '</div>';




        $slider .= '<label>Slide Content</label>';
        $slider .= '<textarea class="slide pixy-input" name="'. $id .'['.$order.'][content]" id="'. $id .'_'.$order .'_slide_content" cols="8" rows="8">'.stripslashes($val['content']).'</textarea>';
        $slider .= '<a class="slide_delete_button" href="#">Delete</a>';
        $slider .= '<div class="clear"></div>' . "\n";
        $slider .= '</div>';
        $slider .= '</li>';

        return $slider;
    }
}// End Class

Basically, I think the fix should be made in "var newSlide", directly to the upload button: 基本上,我认为此修复应在“ var newSlide”中进行,直接在上传按钮上进行:

<span class="button image_upload_button" id="' + sliderId + '_' + newNum + '">Upload</span>

Please let me know if you need more infos, and I hope someone can help me. 如果您需要更多信息,请告诉我,希望有人能帮助我。 Thanks a lot. 非常感谢。

It is not clear what are you doing here: 目前尚不清楚您在这里做什么:

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


//AJAX Upload
    $('.image_upload_button').each(function() {

Looks like you are starting upload immediately after document is loaded. 似乎您在加载文档后立即开始上传。 Suppose instead of $('.image_upload_button').each there should be $('.image_upload_button').live('click', function(){ //upload code here }) 假设不是$('。image_upload_button')。每个应该有$('.image_upload_button').live('click', function(){ //upload code here })

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM