Ответ 1
Используя target
, вы можете получить доступ к элементу управления, который вызвал текущее выполнение/событие. Вот так:
$(event.target)
Функция привязана к событию для многих объектов. Один из этих объектов запускает событие, и jQuery запускается. Как узнать, кто вызвал событие внутри функции JavaScript?
Я пробовал использовать function [name](event){}
и выставлять на событие, но я получаю "данные" null или не является объектом ".
Вот мой код прямо сейчас:
<script type="text/javascript">
$(document).ready(function() {
$('.opening').bind("click", function(event) {
//code to populate event.data since right now, the tags don't hold the info...they will eventually with an XHTML custom namespace
event.data.building = "Student Center";
event.data.room = "Pacific Ballroom A";
event.data.s_time = "9/15/2009 8:00";
event.data.e_time = "9/15/2009 10:00";
indicatePreferenceByClick(event);
});
function indicatePreferenceByClick(event) {
alert("I got clicked and all I got was this alert box.");
$("#left").load("../ReserveSpace/PreferenceByClick", { building: event.data.building, room: event.data.room, s_time: event.data.s_time, e_time: event.data.e_time});
};
</script>
Используя target
, вы можете получить доступ к элементу управления, который вызвал текущее выполнение/событие. Вот так:
$(event.target)
Вот рабочий пример полной страницы. Вызывающий абонент регистрируется на консоли в строке console.log($caller.prop("id"));
:
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Untitled 1</title>
<script src="https://code.jquery.com/jquery-2.2.3.min.js" integrity="sha256-a23g1Nt4dtEYOj7bR+vTu7+T8VP13humZFBJNIYoEJo=" crossorigin="anonymous"></script>
<script type="text/javascript">
$(document).ready(function() {
$('.opening').on("click", {building:"Student Center", room:"Pacific Ballroom A", s_time:"9/15/2009 8:00", e_time:"9/15/2009 10:00"}, function(event) {
indicatePreferenceByClick(event);
});
function indicatePreferenceByClick(event) {
alert("I got clicked and all I got was this alert box.");
var $caller = $(event.target);
console.log($caller.prop("id"));
var building = event.data.building;
var room = event.data.room;
var s_time = event.data.s_time;
var e_time = event.data.e_time;
};
});
</script>
</head>
<body>
<div style="padding:10px"><button type="button" id="button1" class="opening">button1</button></div>
<div style="padding:10px"><button type="button" id="button2" class="opening">button2</button></div>
</body>
</html>
Вам совсем не нужно jQuery, чтобы получить цель события. Он всегда доступен как свойство currentTarget события. Конечно, вы можете использовать jQuery для настройки обработчика событий, но получение цели легко выполняется без использования этой библиотеки. Например:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<button type="button" id="button1" class="opening">button1</button>
<button type="button" id="button2" class="opening">button2</button>
<script type="text/javascript">
$(document).ready(function() {
$('.opening').bind("click", function(event) {
indicatePreferenceByClick(event);
});
});
function indicatePreferenceByClick(event) {
console.log('target', event.currentTarget);
}
</script>
</body>
</html>
Что касается обращения к "null" при попытке доступа к event.data, это имеет смысл, потому что "данные" не являются свойством события click.
$(document).ready(function() {
$('.opening').bind("click", function(event) {
// event.data is null so you can't add properties to it
event.data.building = "Student Center"; // <- this will fail
indicatePreferenceByClick(event);
});
});
Вы можете либо добавить другое свойство в объект данных, например:
$(document).ready(function() {
$('.opening').bind("click", function(event) {
event.data = {};
event.data.building = "Student Center";
indicatePreferenceByClick(event);
});
});
Или вы можете передать другую функцию в свою функцию:
$(document).ready(function() {
$('.opening').bind("click", function(event) {
var data = {};
data.building = "Student Center";
indicatePreferenceByClick(event, data);
});
});
когда вы присоединяете событие к нескольким объектам, лучший способ определить, какой из элементов запускал событие, использует ключевое слово this. Пример -
$('.opening').bind("click", function(event) {
var current = $(this); // will give you who fired the event.
//code to populate event.data since right now, the tags don't hold the info...they will eventually with an XHTML custom namespace
event.data.building = "Student Center";
event.data.room = "Pacific Ballroom A";
event.data.s_time = "9/15/2009 8:00";
event.data.e_time = "9/15/2009 10:00";
indicatePreferenceByClick(event);
});
сообщите мне, если это поможет.
Вы можете использовать этот в функции JQuery, он даст вам элемент, который ввел событие.
<script type="text/javascript">
$(document).ready(function() {
$('.opening').bind("click", function(event) {
console.log($(this));
});
});
</script>