2011-08-25 2 views
2

Я использую Mika Tuupola's File Style Plugin, и что я хочу сделать, примените этот плагин к вновь созданным элементам с jQuery.Применить настройки плагина файла стиля jQuery для вновь созданных элементов

Вот мой код:

<p><input type="file" name="" id="" /></p> 
    <p><button id="add">Add More...</button></p> 


    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script> 
    <script type="text/javascript" src="http://www.appelsiini.net/download/jquery.filestyle.mini.js"></script> 
    <script type="text/javascript"> 

    $("input[type=file]").filestyle({ 
     image: "choose-file.gif", 
     imageheight : 22, 
     imagewidth : 82, 
     width : 250 
    }); 


    $('#add').click(function() { 

     $(this).parent().append('<p><input type="file" name="" id="" /></p>'); 

    }); 

    </script> 

и когда я нажимаю "добавить больше" кнопку, он показывает, как это:

enter image description here

так, что я делаю неправильно? можешь мне помочь?

ответ

0

Поменяйте порядок ... добавьте сначала, затем привяжите плагин.

$('#add').live('click',function() { 
     $(this).parent().append('<p><input type="file" name="" id="" /></p>'); 

     $("input[type=file]").filestyle({ 
      image: "choose-file.gif", 
      imageheight : 22, 
      imagewidth : 82, 
      width : 250 
     }); 



    }); 
+1

в этой ситуации во-первых, по умолчанию создается HTML элемент не применять эти правила, он применяется только тогда, когда я нажимаю на кнопку. есть ли способ, чтобы «оптимизировать» этот код, что нам не нужно будет дублировать настройки фильтра, дважды, до «живой» функции и в этой функции? –

1
$(this).parent().after('<p><input type="file" name="" id="" /></p>'); 

    $('input[type=file]').filestyle({ 
     image: "choose-file.gif", 
     imageheight : 22, 
     imagewidth : 82, 
     width : 250 
    }); 
+0

Хорошо, что оба примера работают, но когда я нажимаю кнопку «Добавить больше», этот плагин добавляет больше вложенных элементов внутри этих созданных входов. вот изображения http://imageshack.us/g/819/firebugv.png/ –

+0

@Lado Lomidze: Переключить 'append' в' after'. См. Мой обновленный ответ. –

+0

Я попытался, даже appendTo, я даже изменил $ (это) на некоторый статический идентификатор, бот, к сожалению, я получаю тот же результат. Он встраивается в вложенные элементы при каждом нажатии. –

2

Оказывается, что основной проблемой является плагин. Он обертывает предоставленный элемент в div, который установлен в display: inline, поэтому все новые элементы файла являются встроенными.

Единственный способ исправить это - изменить плагин, чтобы добавить внешнюю оболочку (например, p, которую вы пытаетесь сделать). Скачать non minified plugin и найти код, который выглядит следующим образом:

 $(self).before(filename); 
     $(self).wrap(wrapper); 

затем сделать его выглядеть следующим образом:

 $(self).wrap("<p/>"); 
     $(self).before(filename); 
     $(self).wrap(wrapper); 

в действии: http://jsfiddle.net/2Xv2e/

+0

спасибо. –

Смежные вопросы