2015-05-11 2 views
0

Я планирую добавить некоторые основные пользовательские использования нескольких html-страниц. Для этого я хочу представить как можно меньше изменений кода на существующие страницы. Вот мой подход:Использование страницы мониторинга с помощью jQuery/javascript

Импорт .js файл, который содержит операции для добавления слушателей на страницу и когда событие вызывается затем вызвать функцию:

<title>myTitle</title> 
<input id="click" type="submit" value="click"/> 
<input id="test" type="textbox" value="test"/> 
<a id="href">href</a> 

    $('a').click(function(e) { 
     var linker = $(this).attr('id'); 
     var title = $(document).find("title").text(); 
     var url = window.location.href; 
    sendData(linker+'\n'+title+'\n'+url);  
    }); 
    $('input').click(function(e) { 
     var linker = $(this).attr('id'); 
     var title = $(document).find("title").text(); 
     var url = window.location.href; 
     sendData(linker+'\n'+title+'\n'+url);  
    }); 

function sendData(dataToSend) { 
    console.log('Sending data \n '+dataToSend) 
} 

сейчас SendData просто фиктивная функция, но я планируйте изменить это, чтобы отправить запрос ajax на конечную точку сервера с помощью значения dataToSend.

Есть альтернативный способ отслеживания того, что пользователь нажимает, а не код a теги и input теги? Могут быть другие типы ввода, о которых я не знаю, которые могут быть вызваны, которые не будут отслеживаться?

скрипку:

http://jsfiddle.net/g2Rxc/167/

+0

Это все зависит от того, что именно вы хотите контролировать. Вы могли бы также привязать глобальный зрелище. – Nit

+1

Каждый вход на странице будет отслеживаться, потому что ваш селектор jQuery выбирает все из них. Я не вижу, как вы можете пропустить что-нибудь? – garryp

+0

@garryp поэтому выше код должен также улавливать текстовое поле? –

ответ

1

Потому что click события могут быть добавлены после вы импортировали код слушателя, вы захотите использовать делегирование событий в элементе document.

Поскольку вы работаете JQuery V 1.6, вы должны будете использовать метод delegate:

$(document).delegate('*', 'click', function(e) { 
    var linker = $(this).attr('id'), 
     title = $(document).find("title").text(), 
     url = window.location.href; 

    sendData(linker+'\n'+title+'\n'+url);  
    return false; 
}); 

Fiddle 1

Более поздние версии JQuery обрабатывать делегирование событий с использованием метода on :

$(document).on('click', '*', function(e) { 
    var linker = $(this).attr('id'), 
     title = $(document).find("title").text(), 
     url = window.location.href; 

    sendData(linker+'\n'+title+'\n'+url);  
    return false; 
}); 

Fiddle 2

+0

спасибо , в качестве альтернативы я мог бы гарантировать, что импорт является последним заявлением на странице?хотя это не столь эффективное решение. –

+0

Если это последний оператор * и *, все события создаются сразу после загрузки страницы, это сработает. Вы можете просто сделать '$ ('*'). Click (...'. –

0

Я вижу, что ваши функции нажмите делать то же самое, так что вы можете вложить все элементы в одном случае, нажмите:

 $('a,input,textare,..,..').click(function(e) { 
      var linker = $(this).attr('id'); 
      var title = $(document).find("title").text(); 
      var url = window.location.href; 
     sendData(linker+'\n'+title+'\n'+url);  
     }); 
0

Try:

$("body").find("*").on("click",function()... 
0

Вам просто нужно запланировать, что вы хотите отследить, прежде чем писать код. Делая это, вы обнаружите, какие элементы и события вы действительно хотите отслеживать. Имея это в виду, вы будете писать что-то вроде:

$('everyElementSeparatedByComma').on('everyEventSeparatedByComma', function(){ 
... 
}); 

Реальный пример:

$('a, input, textarea, form').on('click, change, keypress, submit', function(){ 
    ... 
    }); 
+0

И позвольте мне дать вам предложение. Если вы планируете отслеживать это взаимодействие в Google Analytics, взгляните на этот плагин (я автор, кстати) и посмотреть, найдете ли вы в этом полезное: https://github.com/DiegoZoracKy/google-analytics-event-tracking –

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