Задать вопрос

Как правильно инициализировать плагин?

Есть у меня свой плагин на jquery.
Работает все нормально, но когда инициализация проходит при загрузке страницы.
А мне нужно по клику на кнопку, в модальном окне запустить этот плагин.
Сам js скрипт подключен на основной странице.
Далее делаю так:
// Функция подгрузки основного файла файлового менеджера
 function FMOpen(UserId,where) {
 	var url ='/plagins/fileManager/bodyFileManager.php';
 	var data = {UserId: UserId};
 	ajax_loadInto(url,data,'POST',where,where);
}

$(document).ready(function(){
    // клик по кнопке. Запускаем модальное окно и подгружаем туда php страницу
    $('#fmBBbtn').click(function(){
        $('.popup__overlay').fadeIn(500);
        document.body.style.overflow="hidden";
        FMOpen(window.sessID,'okno');
    })

   })

Сама php страница
error_reporting(E_ALL ^ E_NOTICE ^E_WARNING);
session_start();
$_SESSION['ID'] = isset($_SESSION['ID']) ? $_SESSION['ID'] : 0;
include_once("../../systemDir/config.php");
include_once("../../systemDir/functions.php");
$sql = DbMysql::getInstance();
$func = new Options();
header("Content-Type: text/html; charset=UTF-8");
$rating = $func->GetOne("rating","".MY_PREFIX."_users","id",$_SESSION['ID']);

 if($rating >= $limitRatingForUpload){
  $_REQUEST['UserId'] = isset($_REQUEST['UserId']) ? $_REQUEST['UserId'] : "";
  settype($_REQUEST['UserId'],"int");
  $user = 0;
  ?>
  <script>
  var myOptionFM = {
    UserId : '<?=$_REQUEST['UserId']?>',
    txtAreaID : 'lsarea'
 }
 $(document).ready(function(){
 $('#fmb').FM(myOptionFM);
 });
 </script>
 <div id="fmb"></div>
 <?}else{?>
  У вас недостаточно рейтинга для использования файлового менеджера - минимум <?=$limitRatingForUpload?> !
  <?}?>

Здесь происходит инициализация самого плагина.
;(function($){
  var base = this;
  var methods = {
  	 init : function( params ) {
  	 var defaults = { urlReturnScript : '/plagins/fileManager/returnFileManager.php' };
     base.options = $.extend({}, defaults, params);
     var preData = {userID:options.UserId, folder: '0', type: 'load', collbackFunction: 'returnFM'};
     methods.ajaxSend(preData);

      $('#okno').on('click', "#tree div.fo", function(){
      	  $(this).next().toggle(100);
      	  $(".selected").removeClass("selected");
      	  $(this).hasClass("closed") ? $(this).removeClass("closed").addClass("open selected") : $(this).removeClass("open").addClass("closed selected");
      	  var preData = {userID:options.UserId, folder: $(this).attr('data-fo'), type: 'loadFolder', collbackFunction: 'returnFolder'};
          methods.ajaxSend(preData);
      });

  	 },

     returnFM : function(data) {
     	$('#fmb').html('<div class="ab-container ab-filemanager" id="ab-main">\
<div id="ab-content" class="ab-row">\
<div class="ab-col12" id="ab-breadcrumb"><div id="breadcrumb-links"></div></div>\
<div id="leftpanel" class="ab-col4"><div id="tree" style="display: block;"></div></div>\
<div class="ab-col8" id="ab-container-table">\
<table id="ab-list-pages"><thead><tr><th data-id="thisfolder"></th><th>Размер</th><th>Действие</th></tr></thead><tbody id="treeFiles"></div></div>');
       $('#breadcrumb-links').html(data.BRED);
        $('[data-id="thisfolder"]').html(data.FOLDERNAME);
        $('#tree').html(data.MENUFOLDER);
     },

    returnFolder : function(data) {
    	$('#breadcrumb-links').html(data.BRED);
        $('[data-id="thisfolder"]').html(data.FOLDERNAME);
        if(data.FILES.length > 0){
    var str = '';
    for (var i=0; i < data.FILES.length; i++) {
    	str += '<tr class="white"><td class="ab-tdfile"><span class="ext-file ext-'+data.FILES[i].EXT+'">'+data.FILES[i].FILENAME+'</span></td>\
    	<td><small>'+data.FILES[i].SIZE+'</small></td>\
    	<td><button data-del="'+data.FILES[i].ID+'" class="ab-btn red delete-file" title="Удалить"><i class="fa fa-trash-o" aria-hidden="true"></i></button> \
    	<button data-ren="'+data.FILES[i].ID+'" class="ab-btn blue renamefile" title="Переименовать"><i class=" fa fa-random" aria-hidden="true"></i></button>\
    	<a href="/plagins/fileManager/downloadfile.php?file='+data.FILES[i].ID+'" class="ab-btn asphalt downloadfile" title="Скачать"><i class="fa fa-download" aria-hidden="true"></i></a>\
	</td></tr>';
    }
    }else{
    var str = '<tr class="white"><td class="ab-tdfile">Папка пуста!</td></tr>';
    }
        $('#treeFiles').html(str);
     },

  	 ajaxSend : function(opt) {
  	  $.ajax({
           url: '/plagins/fileManager/returnFileManager.php',
           type: "POST",
           data: opt,
           beforeSend: function() {
           },
           complete: function() {
           },
           success: function(html) {
           var data = JSON.parse(html);
	       if(data == null){alert("Произошла ошибка получения данных!");}else{
	       // Выполняем что-то после получения данных
	        try {
	       if (data.collbackFunction) methods[data.collbackFunction](data);
	       } catch (e) {
            alert('Ошибка JSON: '+e.message+' Пожалуйста, сообщите администратору');
	       }
	       }
	       }, //success
            error: function(e){
                alert('Произошла ошибка запроса, попробуйте позднее!');
            }
        });
    },



  };

  $.fn.FM = function(method) {

  // логика вызова метода
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Метод с именем ' +  method + ' не существует для jQuery.tooltip' );
    }

  } // $.fn.FM

})(jQuery);


Так собственно в чем проблема? При первом запуске модального окна(открытие плагина) все работает отлично, а вот при второй уже клики по элементам обрабатываются дважды, вместо одного, при третьем открытии каждый клик обрабатывается 3 раза и т.д.. почему это происходит и как это поправить?
  • Вопрос задан
  • 202 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы