jQuery AjaxUpload, нужно дважды нажать кнопку?

Я использую плагин AjaxUpload с jQuery, и по большей части все работает нормально, но мне нужно дважды щелкнуть кнопку, чтобы он выполнился. Я предполагаю, что это проблема масштаба... или (?) Все еще учусь...

Вот мой код:

    $(".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);
      }  
   });

Любые идеи приветствуются. :)


person TwstdElf    schedule 25.01.2010    source источник
comment
отредактируйте свой пост (коды), пожалуйста... это трудно читать...   -  person Reigel    schedule 25.01.2010


Ответы (6)


Получил это сработало - вот как для тех, у кого может быть аналогичная проблема...

Основная проблема заключалась в том, что эти кнопки создавались динамически, и 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);
        }       
    });
}

Надеюсь, это поможет кому-то, я знаю, что это сводило меня с ума в течение нескольких дней. ;) Ваше здоровье.

person TwstdElf    schedule 26.01.2010
comment
Пожалуйста, обновите свой исходный пост вместо того, чтобы публиковать его как ответ - person Tim Banks; 26.01.2010
comment
@TB - Извините за это, у меня не было учетной записи, когда я сделал исходный пост, и я не мог найти способ отредактировать его, как только вернулся к нему сегодня. У меня есть учетная запись сейчас, и я сделаю это в будущем. - person TwstdElf; 26.01.2010
comment
рассмотрите возможность пометить этот ответ как принятый, щелкнув значок галочки или галочки рядом с ним. - person Alfred; 18.08.2012
comment
Была аналогичная проблема. Я прикрепил прослушивание, запустив пользовательское событие, когда эта кнопка добавляется динамически, захватил событие и создал экземпляр AjaxUpload для этого элемента. :) - person ksg91; 17.09.2012

Попробуй это :

$(".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');   

});

Мой работает, но я не совсем уверен, как он работает. «Наведение» (вместо «щелчка») создаст новый AjaxUpload (это предотвратит двойной щелчок по нему)

person fnd99    schedule 30.11.2010

Если вы создаете динамическую кнопку, вам нужно создать 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;}
person Fernando Quiroz    schedule 18.10.2012

попробуй это:

   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);
      }  
   });
person Reigel    schedule 25.01.2010

<script type="text/javascript">

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

              new AjaxUpload('#yourlinkorbutton'),{

                  ....

              });
     });

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

это даст вам два клика при загрузке страницы. один щелчок оттуда.

person dje2e4    schedule 10.08.2012
comment
Чтобы улучшить качество вашего поста, пожалуйста, укажите, как/почему ваш пост решит проблему. - person Mick MacCallum; 06.10.2012

если вы используете динамическое управление, в этот раз мы сталкиваемся с проблемой при двойном щелчке, я решил, что это работает для меня. Я потратил два дня и решил это, пожалуйста, проверьте следующие шаги: =

Добавьте функцию загрузки java-скрипта в цикле php для каждого использования ниже

<?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

function  uploadphoto(id)
{

new AjaxUpload('#photo'+id, {

так что вы можете передать динамический идентификатор над строкой образца, вот и все :) счастливого кодирования

person Community    schedule 05.04.2013