2010-12-08 72 views
2

我指的simpledemo在这个问题http://demo.swfupload.org/v220/simpledemo/index.php的SWFUpload - 从形式传递变量,上传

我希望能够通过它由一个下拉菜单设置一个变量。

上传由

var swfu; 
window.onload = function() { 
    var settings = { 
     flash_url : "<?php global_data::show_admin_dir(); ?>SWFUpload v2.2.0.1 Samples/demos/swfupload/swfupload.swf", 
     upload_url: "<?php global_data::show_admin_dir(); ?>upload.php", 
     post_params: {"PHPSESSID" : "<?php echo session_id(); ?>" }, 
     file_size_limit : "100 MB", 
     file_types : "*.*", 
     file_types_description : "All Files", 
     file_upload_limit : 100, 
     file_queue_limit : 0, 
     custom_settings : { 
      progressTarget : "fsUploadProgress", 
      cancelButtonId : "btnCancel" 
     }, 
     debug: false, 
       // Button settings 
     button_image_url: "images/TestImageNoText_65x29.png", 
     button_width: "95", 
     button_height: "29", 
     button_placeholder_id: "spanButtonPlaceHolder", 
     button_text: '<span class="theFont">UPLOAD</span>', 
     button_text_style: ".theFont { font-size: 16; }", 
     button_text_left_padding: 12, 
     button_text_top_padding: 3, 

     // The event handler functions are defined in handlers.js 
     file_queued_handler : fileQueued, 
     file_queue_error_handler : fileQueueError, 
     file_dialog_complete_handler : fileDialogComplete, 
     upload_start_handler : uploadStart, 
     upload_progress_handler : uploadProgress, 
     upload_error_handler : uploadError, 
     upload_success_handler : uploadSuccess, 
     upload_complete_handler : uploadComplete, 
     queue_complete_handler : queueComplete // Queue plugin event 
    }; 

    swfu = new SWFUpload(settings); 
}; 

发起和形式如下

<form id="form1" action="index.php" method="post" enctype="multipart/form-data"> 
     <p><label>Category: </label><input type="radio" name="for" class="radio" value="category" checked="checked" /><select name="foo"><option>...</option><?php global_data::show_breadcrum_list('option', "/"); ?></select></p> 
     <p><label>Product: </label><input type="radio" name="for" class="radio" value="category" /><select disabled="disabled"><option name="foo">...</option><?php global_data::show_breadcrum_list('option', "/"); ?></select></p>  
     <div class="fieldset flash" id="fsUploadProgress"> 
      <span class="legend">Upload Queue</span> 
     </div> 
     <div id="divStatus">0 Files Uploaded</div> 
     <div> 
      <span id="spanButtonPlaceHolder"></span> 
      <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" /> 
     </div> 
    </form> 

如果有人能在正确的方向,将不胜感激指向我。通过在init设置post_params: {"PHPSESSID" : "<?php echo session_id(); ?>", "PR" : thing },

###### EDIT ##### 我可能已经找到了一种方法......

包装这一切在功能

function loader(thing) { 
    .... 
} 

,然后使用

$(document).ready(function(){ 
    $('select[name=foo]').change(function(){ 
     loader($(':selected', this).text()); 
    }); 
}); 

它会工作,但如果我上传之前改变选择的选项第二次会得到一个错误,只有仙d的第一选择,而不是第二...

回答

0

######## EDIT #######

右键这个工作的魅力。

$(function() { 
    function loader(thing) { 
     var settings = { 
      flash_url : admin_dir + "SWFUpload v2.2.0.1 Samples/demos/swfupload/swfupload.swf", 
      upload_url: web_root + "pm_admin/upload_image", 
      post_params: { "aj" : "true", "PR" : thing }, 
      file_size_limit : "100 MB", 
      file_types : "*.*", 
      file_types_description : "All Files", 
      file_upload_limit : 100, 
      file_queue_limit : 0, 
      custom_settings : { 
       progressTarget : "fsUploadProgress", 
       cancelButtonId : "btnCancel" 
      }, 
      debug: false, 

      // Button settings 
      button_image_url: "images/TestImageNoText_65x29.png", 
      button_width: "95", 
      button_height: "29", 
      button_placeholder_id: "spanButtonPlaceHolder", 
      button_text: '<span class="theFont">UPLOAD</span>', 
      button_text_style: ".theFont { font-size: 16; }", 
      button_text_left_padding: 12, 
      button_text_top_padding: 3, 

      // The event handler functions are defined in handlers.js 
      file_queued_handler : fileQueued, 
      file_queue_error_handler : fileQueueError, 
      file_dialog_complete_handler : fileDialogComplete, 
      upload_start_handler : uploadStart, 
      upload_progress_handler : uploadProgress, 
      upload_error_handler : uploadError, 
      upload_success_handler : uploadSuccess, 
      upload_complete_handler : uploadComplete, 
      queue_complete_handler : queueComplete // Queue plugin event 
     }; 

     swfu = new SWFUpload(settings); 
    }; 
    function pre_load(){ 
     var data = ''; 
     data += '<div class="fieldset flash" id="fsUploadProgress">'; 
     data += ' <span class="legend">Upload Queue</span>'; 
     data += '</div>'; 
     data += '<div id="divStatus">0 Files Uploaded</div>'; 
     data += '<div>'; 
     data += ' <span id="spanButtonPlaceHolder"></span>'; 
     data += ' <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />'; 
     data += '</div>'; 
     return data; 
    } 
    /* args stores the input/select/textarea/radio's name and then it's value and then passes a single serialised string when uploading */ 
    /* then use a trigger to update the array, off focus, change, keyup... along thos lines on a class set for all inputs, selects and so on... works a treat */ 
    var args = {}; 
    $('.radio').click(function(){ 
     var ob = $(this).siblings('select'); 
     $('#uploader-wrapper').html(pre_load()); 
     $('.radio').siblings('select').attr('disabled', 'disabled'); 
     ob.removeAttr('disabled'); 
     args[$(this).attr('name')] = $(this).val(); 
     args[ob.attr('name')] = $(':selected', ob).text(); 
     loader($.param(args)); 
    }) 
    $('select[name=foo]').change(function(){ 
     var ob = $(this); 
     $('#uploader-wrapper').html(pre_load()); 
     args[ob.attr('name')] = $(':selected', ob).text(); 
     loader($.param(args)); 
    }); 
}); 

与形式:

<form id="form1" action="index.php" method="post" enctype="multipart/form-data"> 
     <p><label>Category: </label><input type="radio" name="for" class="radio" value="category" checked="checked" /><select name="foo"><option>...</option><?php global_data::show_breadcrum_list('option', "/"); ?></select></p> 
     <p><label>Product: </label><input type="radio" name="for" class="radio" value="category" /><select disabled="disabled"><option name="foo">...</option><?php global_data::show_breadcrum_list('option', "/"); ?></select></p>  
     <div id="uploader-wrapper"> 
      <div class="fieldset flash" id="fsUploadProgress"> 
       <span class="legend">Upload Queue</span> 
      </div> 
      <div id="divStatus">0 Files Uploaded</div> 
      <div> 
       <span id="spanButtonPlaceHolder"></span> 
       <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" /> 
      </div> 
     </div> 
    </form> 
+0

因此,您每次更改选择后都会重新实现swfuploader? – Chris 2010-12-09 13:57:50

0

我已经在两个方面(包括使用jQuery)解决了这个问题:饼干和MySQL。这个概念将是一个

$('select[name=foo]').change(function(){ 
    $.cookie('dropdown', $(this).val()); 
}); 

这样,当你改变下拉菜单,你现在有一个cookie。在upload.php中,您可以调用该cookie并将其用作变量。

另一种选择是

$('select[name=foo]').change(function(){ 
    $.post('updatedatabase.php', {'dropdown': $(this).val()}); 
}); 

然后,你打电话给你的数据库从upload.php的,让您的下拉列表中的最后一个值。这两种方式都不是很优雅,但我已经让他们工作过。如果有人发布了更优雅的解决方案,我很乐意。

+0

我也是。仍然在更好的解决方案 – 2010-12-08 20:50:54

1

我试图做一个类似的事情,找到这个解决方案并与我的同事讨论后,我们用另一种方法解决了这个问题,使用swfupload提供的Javascript API。

我们试图通过质量设置以及视频上传。最终,这个问题的解决方案涉及如何更改post_params。与post_params开始将下拉的默认值:

var selected_quality = $('select#quality-".$dirId." option:selected').val(); 
... 
post_params: {'quality' : selected_quality}, 

然后你可以使用addPostParam方法(位于swfupload.js)时,在你的下拉菜单中选择选项,以更新此。

$('select#quality-".$dirId."').change(function() { 
    swfu.addPostParam('quality' , this.value); 
});