2012-06-28 20 views
12

Necesito obtener el ID del div en el que se hace clic.¿Cómo uso jQuery para obtener el ID del div en el que se ha hecho clic?

Ahora cuando hago clic en la clase de estado I, devuelvo una identificación no definida.

Aquí está mi código Javascript

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

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

¿Cómo debería obtener el valor de ID correcto?

+1

¿Por qué el '$ .proxy'? – gdoron

+0

lo necesito llamo a otros métodos –

+0

ii le dará la identificación de todos los elementos que coincidan con este selector. use "cada" – speedingdeer

Respuesta

17

No estoy seguro de por qué está usando $ .proxy. Eliminarlo debería obtener los resultados deseados.

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

Si aún desea utilizar proxy que puede acceder al elemento hecho clic a través event.currentTarget

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

Como mi comentario anterior: ¿Por qué usar jQuery para obtener la identificación del elemento? y te falta el punto antes del selector de estado. – gdoron

+0

porque eso es lo que está haciendo. – digitaldreamer

+1

ummm. Debería arreglar su código, no copiarlo.:) – gdoron

2

¿Qué tal:

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

Qué tiene que trabajar sólo para divs con la clase status ? Si es así, trate de:

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

um No he votado negativamente, pero 'div.status 'funcionaría como selector. –

+0

Sí, eso probablemente sería más limpio, gracias. – woemler

+0

Ahora tiene otro error, ahora está buscando nodos dentro de un div con la clase de estado. ¿Eres parejo con jQuery? – gdoron

1

uso event.target hacer referencia a ese elemento

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

ver en acción: http://jsfiddle.net/vNaqR/

+0

muchas gracias :) –

+0

NOTA: podría usar 'var status = event.target.id;' pero seguí su código en esa parte. –

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

Explicación de emisión PROXY:

tener cuidado usando $ .proxy(). Llama a una función (aquí el parámetro 1) utilizando el contexto especificado (aquí el parámetro 2) en lugar de usar el contexto en el que se desencadena el evento.

En la pregunta principal, el contexto especificado es $ (documento). De esta forma, la función intenta obtener el ID del documento en lugar del ID del objeto en el que se desencadena el evento (el elemento $ ('estado')).

0

Estoy tratando de mostrar el div oculto cuando hago clic en el botón, luego cada vez que el usuario hace clic en el botón muestra más índices.

que no funciona ya en la lista siempre está vacía si estoy en el modo de suma no edito (mostrar el div cuando es de edición)

     <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> 
Cuestiones relacionadas