2016-04-10 11 views
1

Wie verwende ich das Datenattribut, um eine dynamisch generierte ID aus einer Rails App an jQuery zu übergeben? Wenn ich es versuche, gibt der Wert undefined zurück, es sei denn, ich schicke es nur an eine Alarmbox.

Dieser Code (die den Debug-Link als Hack verwendet):

$(document).on "page:change", -> 
    $('.debug_link_id').click -> 
     alert $(this).data('dynamic_id) 

Zeigt die dynamic_id im Warnfeld.

jedoch den gleichen Selektor, dieser Code:

$(document).on "page:change", -> 
    jqVar = $(this).data('dynamic_id') 
    $('.debug_link_id').click -> 
     alert jqVar 

Shows "undefiniert" in der Warnmeldung. [mit .attr ('data-dynamic_id') gibt die gleichen Ergebnisse]

bitte mir sagen:

  1. Warum der erste Code arbeitet und der zweite tut
  2. nicht
  3. Wenn es eine bessere ist Strategie für dynamische ids in jQuery
+0

Was löst 'Seite: change' Ereignis? Was ist '$ (this)' in 'page: change' Handler? – guest271314

Antwort

1

Versuchen Sie ziehen mit event delegationthis zu "#debug_link_id" innerhalb Handler einzustellen.

$(document).on "page:change", "#debug_link_id", -> 
+0

Was ist der Zweck der Erstellung eines 'click' Handlers in einem anderen Event-Handler? – guest271314

+0

Ich verwende das, um herauszufinden, was mit jQuery passiert. –

+0

@MichaelvanHolst Haben Sie die verlinkte Seite oben gelesen? Haben Sie überprüft, was '$ (this)' bei 'jqVar = $ (this) .data ('dynamic_id')' ist? – guest271314

1

Das liegt daran, dass Sie die this an der falschen Stelle beziehen ..

$(document).on "page:change", -> 
    $('#debug_link_id').click -> 
     alert $(this).data('dynamic_id)// <-- That "this" is referring a object with id debug_link_id 

$(document).on "page:change", -> 
    jqVar = $(this).data('dynamic_id') //<-- That "this" is referring a object that I don't know where this is come from... 
    $('#link_id').click -> 
     alert jqVar 
+0

In beiden Fällen klicke ich auf den Debug-Link. Das habe ich bei der Bearbeitung meiner Frage übersehen. –

+0

Wenn Sie '$ (this)' in einige Ereignisbehandlungsroutinen in jquery einfügen, bedeutet dies, dass Sie das aktuelle Objekt Ihrer Funktion verwenden möchten. –

Verwandte Themen