Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.01.2014, 12:05
Новичок на форуме
Отправить личное сообщение для diman91 Посмотреть профиль Найти все сообщения от diman91
 
Регистрация: 14.04.2013
Сообщений: 8

data-click на чистом js
Всем привет!
Такой вопрос:
Вещаю на элемент атрибут data-click="myFunction"
Как средствами js распарсить все это дело и навещать обработчик?
Не ударить ли это на производительнось?
Если допустим у меня интерфейс без перезагрузки и эти элементы динамически то создаются то удаляются (например модальные окна) не начнет ли компьютер дико орать и грется (утечка памяти и все такое) после продолжительной работы с интерфейсом?
Ответить с цитированием
  #2 (permalink)  
Старый 08.01.2014, 12:34
Аватар для animhotep
Профессор
Отправить личное сообщение для animhotep Посмотреть профиль Найти все сообщения от animhotep
 
Регистрация: 17.01.2013
Сообщений: 887

тоесть стандартный onclick не устраивает?
конечно же свой велосипед ударит на производительность
Ответить с цитированием
  #3 (permalink)  
Старый 08.01.2014, 12:43
Новичок на форуме
Отправить личное сообщение для diman91 Посмотреть профиль Найти все сообщения от diman91
 
Регистрация: 14.04.2013
Сообщений: 8

Стандартный нет, например через стандартный у меня будет выглядит примерно так onclick="new AppMenu().create()"
хочу чтобы было так data-click="app_menu.create"
да и еще использую кастомный я смогу подхватывать а не создавать снова и снова через new
Ответить с цитированием
  #4 (permalink)  
Старый 08.01.2014, 19:44
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

diman91, а что мешает сделать так
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <div id="click">  click </div>
    
    <script>
     
      
      var elem = document.getElementById("click"),
          app = new App();
      
     
      elem.onclick = function () {
      
        this.innerHTML = app.getRandom();
               
      }
      
      
      
      function App() {
      
        this.getRandom = function () {
         
          return Math.random().toString().slice(2);
        }
      }




    </script>

  </body>
</html>
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #5 (permalink)  
Старый 08.01.2014, 20:19
Новичок на форуме
Отправить личное сообщение для diman91 Посмотреть профиль Найти все сообщения от diman91
 
Регистрация: 14.04.2013
Сообщений: 8

Сделать так конечно можно, только вот у меня в интерфейсе все управляющие элементы подгружаются динамически, и каждый раз навешивать обработчик нехочится, да еще и id присваивать.
Ответить с цитированием
  #6 (permalink)  
Старый 08.01.2014, 20:33
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

diman91, а зачем каждый раз навешивать ? Почитайте
http://learn.javascript.ru/bubbling-and-capturing
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #7 (permalink)  
Старый 08.01.2014, 20:49
Новичок на форуме
Отправить личное сообщение для diman91 Посмотреть профиль Найти все сообщения от diman91
 
Регистрация: 14.04.2013
Сообщений: 8

cyber,Вы не совсем поняли, приведу пример, открываем грид в строке видим управляющие элементы например жмакаем "Редактировать" открывается модальное окно со сложной формой, в ней куча функционала, и допустим 25 элементов которые запускают разные функции, причем функции могут быть не просто разные но и от разных модулей.
Ответить с цитированием
  #8 (permalink)  
Старый 08.01.2014, 21:05
Новичок на форуме
Отправить личное сообщение для diman91 Посмотреть профиль Найти все сообщения от diman91
 
Регистрация: 14.04.2013
Сообщений: 8

Приведу пример модуля
var AppMenu = (function () {
    var _self;
    var _protectFn;

    function AppMenu() {
        _self = this;
    }

    AppMenu.prototype = {
        changeStatus:function(status){
            var elements = _protectFn.getCheckedElements();
            var data = {"req":"changeStatus","status":status,"elements":elements};
            if (elements.length>0) {
                if (confirm("Вы уверены что хотите изменить статус у "+elements.length+" объектов?")) {
                    new ajaxSender({
                        url:'/office/appMenu/status',
                        data:data,
                        success: function(answer){
                            _protectFn.afterChangeStatus(answer);       
                        } 
                    }).send();
                }    
            }
        }
        //и так далее публичные методы
    }

    _protectFn = {
        getCheckedElements:function(){
            var els = [];
            $(".checks").each(function(){
                if ($(this).is(':checked')) {
                    els[els.length] = $(this).attr("data-el");
                }
            });
            return els;
        },
        afterDelete:function(answer){
            //
        }
        //и так далее защишеные методы
    }

    return AppMenu;
})();

Бывает так что надо чтобы элемент создавал новый экземпляр, иногда нужно запустить метод в уже созданном экземпляре. Поэтому вещать на элементы onclick="new blablabla" не всегда подходит. А награмождать лишний код тоже неохото.
Ответить с цитированием
  #9 (permalink)  
Старый 08.01.2014, 21:13
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

diman91,
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>

    <div id="container">
    
      <div data-method-click="positive" > click and get positive number</div>
    
      <div data-method-click="negative"> click and get positive negative</div>
      
    </div>
    
    
    <script>
      
      var cont = document.getElementById("container"),
          app = new App,
          handlers = {
            positive: app.getPositive,
            negative: app.getNegative
          
          };
      
      cont.addEventListener("click", onContainerClick);
      
      function onContainerClick (e) {
        
        var val = e.target.getAttribute("data-method-click");
      
        if(val && handlers[val]){ 
          
          e.target.innerHTML = handlers[val]();
         
        } 
      
      }
      
      
      
      function App() {
        
        this.getPositive = function () {
        
          return Math.random().toString().slice(2);
        };
        
        this.getNegative = function () {
        
          return "-" + Math.random().toString().slice(2);
        };
      
      
      
      }

    </script>

  </body>
</html>
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #10 (permalink)  
Старый 08.01.2014, 22:01
Новичок на форуме
Отправить личное сообщение для diman91 Посмотреть профиль Найти все сообщения от diman91
 
Регистрация: 14.04.2013
Сообщений: 8

cyber,Возможно Вы гдето близко от той реализации которую я хочу
Что если повесить обработчик на боди
document.body.addEventListener("click", onBodyClick);
function onBodyClick(e){
	var data_click = e.target.getAttribute("data-click");
	if(data_click){
		//
	}
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проекты на чистом js kidar2 Общие вопросы Javascript 7 09.01.2014 14:26
Вывыод контента через JS inet_boy Элементы интерфейса 0 18.11.2013 03:00
аналог ajaxupload на чистом js Гугл-мен Общие вопросы Javascript 1 04.11.2013 13:49
вопрос по видимости переменных. yiooxir Angular.js 3 31.10.2013 12:37
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 19:05