jQuery AjaxUpload,必须单击两次按钮?

时间:2010-01-25 18:57:52

标签: jquery upload click

我正在使用带有jQuery的AjaxUpload插件,并且大多数情况下一切正常,但我必须单击我的按钮两次才能执行它。我猜这是一个范围问题......或者(?)还在学习......

这是我的代码:

    $(".upload-button").live("click", function(event) {
       event.preventDefault();
       var currentId = $(this).closest("div").attr("id").replace("slide-", "");
       new AjaxUpload($(this), {
         action: "./php/upload.php",
         name: 'userfile',
         autoSubmit: true,
         onSubmit: function(file , ext) {
       },
       onComplete: function(file, response) {
         // enable upload button
         // this.enable();
         $("#slide-" + currentId).find(".movie-image").attr("src", baseImgPath + file);
         $("#mImg" + currentId).val(file);
      }  
   });

任何想法都表示赞赏。 :)

6 个答案:

答案 0 :(得分:2)

搞定了 - 这是其他任何人可能遇到类似问题的方法......

主要问题是这些按钮是动态创建的,并且AjaxUpload最初不会在.live()调用中绑定,因此“点击,移动,再次点击,触发”。

通过调用AjaxUpload(包含在它自己的函数中,如下所示),在我的循环中创建按钮时,它们最初被绑定,并且正常运行。

循环中使用的行:

makeUpButton(("#upload-button-" + slideCount), slideCount);

AjaxUpload调用:

function makeUpButton(theButton, theId) {
    new AjaxUpload(theButton, {
        action: "./php/upload.php",
        name: 'userfile',
        autoSubmit: true,
        onSubmit: function(file , ext) {
            this.disable();
        },
        onComplete: function(file, response) {
            this.enable();
            $("#slide-" + theId).find(".movie-image").attr("src", baseImgPath + file);
            $("#mImg" + theId).val(file);
        }       
    });
}

希望这有助于某人,我知道这让我疯了几天。 ;) 欢呼声。

答案 1 :(得分:2)

试试这个:

$(".upload-button").live("hover", function(event) {

   var currentId = $(this).closest("div").attr("id").replace("slide-", "");
   new AjaxUpload($(this), {
     action: "./php/upload.php",
     name: 'userfile',
     autoSubmit: true,
     onSubmit: function(file , ext) {
         //onsubmit code here..
     },
     onComplete: function(file, response) {
         // oncomplete code here
     }  
   });
   $(this).trigger('click');   

});

我开始工作,但我不确定它是如何工作的。 'hover'(而不是'click')将创建一个新的AjaxUpload(这将阻止它点击两次)

答案 2 :(得分:2)

如果要创建动态按钮,则需要使用每个按钮的ID创建一个AjaxUpload,试试这个:

// to add new button                                                                                                                                  
$("#add_sector").click(function() {
    var ID = [Generate a new ID];
    var button = '<a href="javascript:;" id="' + ID + '" class="subir_imagen"><img src="images/icon_subir32.png"></a>';


    $('#cont_img_catalogo').append(button);

    //create Ajax                                                                                                                                     
    new AjaxUpload($('#' + ID ),{
      action: 'procesar_imagen.php',
          name: 'image',
          onSubmit : function(file, ext){
          // desabilitar el boton                                                                                                                     
          this.disable();
          ...
            },
          onComplete: function(file, response){
          // Habilitar boton otra vez                                                                                                                 
          this.enable();

          ...

            }
      });



  });

删除按钮使用:

$('#' + ID).fadeOut("slow", function() { $('#' + ID).remove(); });

如果您使用img,则需要班级

a, a:visited{
display: block;
float: left;
text-decoration:none;}

答案 3 :(得分:0)

试试这个:

   var $button = $(".upload-button");
   new AjaxUpload($button, {
         action: "./php/upload.php",
         name: 'userfile',
         autoSubmit: true,
         onSubmit: function(file , ext) {
       },
       onComplete: function(file, response) {
         // enable upload button
         // this.enable();
         var currentId = $(this).closest("div").attr("id").replace("slide-", "");
         $("#slide-" + currentId).find(".movie-image").attr("src", baseImgPath + file);
         $("#mImg" + currentId).val(file);
      }  
   });

答案 4 :(得分:0)

<script type="text/javascript">

 $(document).ready(function() {
      $('#yourlinkorbutton').click(function(){

              new AjaxUpload('#yourlinkorbutton'),{

                  ....

              });
     });

     $('#yourlinkorbutton').trigger.click();
     $('#yourlinkorbutton').trigger.click();
});

在页面加载时会让你两次点击。从那里点击一下。

答案 5 :(得分:0)

如果您使用动态控制,那次我们在两次点击时遇到问题,我已经解决了它对我有用。 我花了两天时间解决这个问题,请检查以下步骤:=

在php循环中为每个使用下面的

添加java脚本加载函数
<?php
for ($i=1; $i<=5; $i++)
  {
?>
<script>
$(window).load(function () 
        {
        uploadphoto(<?php echo $i; ?>)                
            });
</script>
<a href="javascript:void(0)" id="photo<?php echo $i; ?>" onclick="uploadphoto(<?php echo $i; ?>)" style="color: #666;"> Upload </a>
<?php

}
?>

和您的javascript文件,您可以从php循环

获取动态ID
function  uploadphoto(id)
{

new AjaxUpload('#photo'+id, {

所以,你可以在样本行上方传递动态ID,就是它:)快乐编码