2012-06-28 17 views
12

Ho bisogno di ottenere l'ID del div cliccato.Come posso usare jQuery ottenere l'ID del div su cui è stato fatto clic?

Ora quando faccio clic sulla classe di stato I un ID indefinito restituito.

Ecco il mio codice javascript

jQuery(document).ready(function() { 
    $(".status").bind('click', $.proxy(function() { 
     var status = $(this).attr('id'); 
     alert(status); 
    }, this)); 
});​ 

e HTML

<div class="status" id="s_1">111111</div> 
<div class="status" id="s_3">33333</div> 
<div class="status" id="s_2">222222</div> 

Come devo ottenere il valore id corretto?

+1

Perché il '$ .proxy'? – gdoron

+0

ho bisogno di chiamare altri metodi –

+0

ii ti darà l'id di tutti gli elemets abbinati a questo selettore. usa "each" – speedingdeer

risposta

17

Non sono sicuro del motivo per cui si sta utilizzando $ .proxy. Rimuovendolo dovrebbe ottenere i risultati desiderati.

$('.status').click(function(event) { 
    var status = $(this).attr('id'); 
}); 

Se si desidera continuare a utilizzare il proxy è possibile accedere all'elemento cliccato attraverso event.currentTarget

$(".status").bind('click', $.proxy(function(event) { 
    var status = $(event.currentTarget).attr('id'); 
    alert(status); 
}, this)); 
+0

Come il mio commento sopra: Perché usare jQuery per ottenere l'id dell'elemento? e ti manca il punto prima del selettore di stato. – gdoron

+0

perché è quello che sta facendo. – digitaldreamer

+1

ummm. Dovresti correggere il suo codice non copiarlo.:) – gdoron

2

ne dite:

$('div').on('click', function(){ 
    alert($(this).attr("id")); 
}); 

ha a che funziona solo per i div con classe status ? In tal caso, provare:

$('div.status').on('click', function(){ 
    alert($(this).attr("id")); 
}); 
+0

um non ho fatto downvote ma 'div.status 'avrebbe funzionato come selettore. –

+0

Sì, probabilmente sarebbe più pulito, grazie. – woemler

+0

Ora ha un altro errore, questo è ora alla ricerca di nodi all'interno di un div con la classe di stato. Sei fimilar con jQuery? – gdoron

1

uso event.target fare riferimento a tale elemento

jQuery(document).ready(function() { 
     $(".status").bind('click', $.proxy(function(event) { 
      var status = $(event.target).attr('id'); 
      alert(status); 
    }, this)); 
}); 

vedere in azione: http://jsfiddle.net/vNaqR/

+0

grazie mille :) –

+0

NOTA: potresti usare 'var status = event.target.id;' ma ho seguito il tuo codice su quella parte. –

0
$('selector').each(function(){ 
    $(this).click(function(){ 
     alert($(this).attr('id')) 
    }); 
}); 
0

Spiegazione di delega problema:

essere attento usando $ .proxy(). Chiama una funzione (qui il parametro 1) utilizzando il contesto specificato (qui il parametro 2) invece di utilizzare il contesto in cui viene attivato l'evento.

Nella domanda principale, il contesto specificato è $ (documento) così. In questo modo, la funzione tenta di ottenere l'ID del documento anziché l'ID dell'oggetto su cui viene attivato l'evento (l'elemento $ ('. Status')).

0

Sto tentando di visualizzare il div nascosto quando clicco sul pulsante, quindi ogni volta che l'utente fa clic sul pulsante visualizza più indici.

Ecco non funziona in quanto sulla lista è sempre vuota se sono sul modo di addizione non EDIT (visualizzare il div quando è Edit)

     <li> 
         <button type="button" name="addAnotherButton" class="btnFwd gradient smButtonStyling" 
         onClick="showInput();"> 
          <img src="/Common/web/static/images/add.png" class="smbtnIcon" /> 
          Add Another 
        </button> 
       </li> 

       <li> 
          <c:forEach items="${planInfoList}" var="planInfo" varStatus="status"> 
         <div id="uploadBody[${status.index}]" style='display = none'> 
          <label class="adminFormLabel">Title:</label> 
          <form:input path="planInfoList[${status.index}].title" onfocus="this.select();" maxlength="50" size="30"/> 
          <label class="adminFormLabel">Plan Number:</label> 
          <form:input path="planInfoList[${status.index}].planNumber" size="10" maxlength="10"/> 
         </div> 
        </c:forEach> 
       </li> 

JS:

var found = 0; 
    if ($('#uploadBody' + i).hide()) { 
     for (var i = 0; i < 5; i++) { 
      if (found == 0) { 
       $('#uploadBody' + i).show(); 
      } 
      found++; 
     }  
     } 
0
<!DOCTYPE html> 
<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script> 
$(document).ready(function(){ 
    $(".divField").click(function(){ 
     alert("id : " + $(this).attr("id")); 
    }); 

}); 
</script> 
</head> 
<body> 
<h1>For finding id click below text</h1> 
<div id="id1" value="Example 1" class="divField">My id is <b>id1</b></div> 
<div id="id2" value="Example 2" class="divField">My id is <b>id2</b></div> 

</body> 
</html> 
Problemi correlati