2013-08-08 24 views
8

Chcę utworzyć eventHandler, który przekazuje "ten" obiekt jako parametr. Spróbowałem tego, to działa dobrze i uzyskać obiekt dom, na którym na zmianę nawet został wywołany.przekazywanie tego obiektu jako argumentu w zdarzeniu onChange?

Ale jak na moje rozumienie tego nie powinien pracować jako pierwszy argument oczekuje jako „zdarzenia” (a nie „ta” obiektu) w metodzie obsługi zdarzenia jak poniżej

<select id="customer" onchange="custChange(event);"> 

możemy przekazać żadnego argumentu (to lub zdarzenie) w metodzie eventHandler należy podać poprawną nazwę lub pierwszy argument będzie zawsze uważany za obiekt zdarzenia?

Odpowiedz

7

Ty zdefiniowane custChange a co ważniejsze: ty wzywają go. Dlatego możesz sam zdecydować, które argumenty przyjąć i w jakiej kolejności. Tylko dla wywoływanych przez ciebie funkcji musisz zwracać uwagę na kolejność argumentów.

Ale jeśli chcesz zdefiniować custChange, aby była zgodna z other waysof binding event handlers, tj.

function custChange(event) { 
    // `this` refers to the DOM element 
} 

następnie można nazwać to z

custChange.call(this, event); 
0

Można to zrobić zgodnie z dyskretny javascript:

$("#customer").on("change", function() { 
    ... and here you have $(this) object linked to 'customer' select 
}); 
1

Pierwszym argumentem zawsze będzie wydarzeniem.

[edytuj] Możesz zadzwonić do swojego handlera z dowolnie wybranym argumentem, obiekty event i this są dostępne po wywołaniu. event odnosi się do obiektu zdarzenia, a this odnosi się do obiektu DOM wypalania zdarzenie [/ edit]

Jednak w przewodnika event.currentTarget będzie link do obiektu, który opalane zdarzenie.

<script> 
    function custChange(event) { 
     // event.currentTarget = select element 
    } 
</script> 
<select id="customer" onchange="custChange(event);"> 
0

Może możesz zrobić coś takiego:

<p><a id="link" href="#">click me</a></p> 
<script> 
var link = document.getElementById("link"); 
AttachEvent(link, "click", EventHandler); 
function AttachEvent(element, type, handler) { 
    if (element.addEventListener) element.addEventListener(type, handler, false); 
    else element.attachEvent("on"+type, handler); 
} 

Mam nadzieję, że to pomaga.

1

Zrobiłem test.

function change(){ 
    console.info(arguments); 
} 

<select name="" id="" onchange="change(this, event)"> 
    <option value="1">A</option> 
    <option value="2">B</option> 
    <option value="3">C</option> 
</select> 

<select name="" id="" onchange="change(event, this)"> 
    <option value="1">A</option> 
    <option value="2">B</option> 
    <option value="3">C</option> 
</select> 

<select name="" id="" onchange="change(this, e)"> 
    <option value="1">A</option> 
    <option value="2">B</option> 
    <option value="3">C</option> 
</select> 

ja obsługiwane wybiera powyżej jeden po drugim, a następnie dostał poniżej na konsoli informacje:

  • [Select, Event]
  • [zdarzenie, wybierz]
  • Uncaught ReferenceError: e nie jest zdefiniowany

Tak więc, na podstawie wyników, doszedłem do wniosku, że musimy podać poprawne słowo w wywołaniu strony i może ono ulec zmianie ich pozycja.

+0

Czy istnieje dokumentacja gdzieś określające to? – LazerSharks