2009-09-03 20 views
15

Funkcja jest przypisana do zdarzenia dla wielu obiektów. Jeden z tych obiektów uruchamia to wydarzenie, a jQuery kopie. Jak mogę się dowiedzieć, kto wystrzelił wydarzenie w funkcji JavaScript?Uzyskaj informacje o źródle zdarzenia z jQuery

Próbowałem już używać function [name](event){} i szturchania na zdarzenia, ale otrzymuję "" danych "jest null lub nie obiekt".

Oto mój kod teraz:

<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> 
+4

możliwe duplikat [Pierwsze identyfikator elementu wypalonego że zdarzenie jQuery] (http://stackoverflow.com/questions/48239/getting-the-id-of-the-element-that- fired-an-event-using-jquery) –

Odpowiedz

0

Oto przykład roboczych kompletnej strony. Rozmówca jest zalogowany do konsoli w linii 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> 
0

Nie trzeba jQuery w ogóle dostać cel zdarzenia. Jest zawsze dostępny jako aktualna właściwość TARGET zdarzenia. Możesz użyć jQuery do skonfigurowania obsługi zdarzeń, oczywiście, ale uzyskanie celu jest łatwe bez użycia tej biblioteki. Na przykład:

<!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> 

Co do czynienia z „null” podczas próby dostępu event.data, że ​​ma sens, ponieważ „dane” nie jest właściwością zdarzenia 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); 
     }); 
    }); 

Możesz też dodać kolejny obiekt do obiektu danych w taki sposób:

$(document).ready(function() { 
     $('.opening').bind("click", function(event) { 
      event.data = {}; 
      event.data.building = "Student Center"; 
      indicatePreferenceByClick(event); 
     }); 
    }); 

Albo, można przekazać innej zmiennej do funkcji:

$(document).ready(function() { 
     $('.opening').bind("click", function(event) { 
      var data = {}; 
      data.building = "Student Center"; 
      indicatePreferenceByClick(event, data); 
     }); 
    }); 
0

Korzystanie target można uzyskać dostęp kontrola, która spowodowała bieżącą realizację/zdarzenie. Tak:

$(event.target) 
0

po podłączeniu wydarzenie do wielu obiektów najlepszy sposób, aby zidentyfikować, które z elementów opalane zdarzenie jest za pomocą słowa kluczowego ten. Przykład -

$('.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); 
    }); 

daj mi znać, jeśli to pomoże.

1

Możesz użyć ten w funkcji Jquery, da ci przedmiot, który wstrzyknął wydarzenie.

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.opening').bind("click", function(event) { 
     console.log($(this)); 
    }); 
});  
</script> 
Powiązane problemy