¿Por qué .val () siempre está vacío (Jquery)?

Tengo un problema con una entrada.

aquí está mi código html / php:

$dotation = ($ig["dotation"]) ? $ig["dotation"]: ''; $bo .= ' ' . $dotation . ' Modifier 

aquí está mi código js:

  var dot_cha = $(this).parent().find('.dot').val(); 

mi pregunta es, ¿por qué var dot_cha siempre está vacío? cuando uso .html insteed of .val, obtengo el correcto entonces, ¿dónde está mi error?

Gracias.

.val () toma el atributo de valor de un elemento de entrada. “.dot” es un td y no tiene un valor-atributo.

¿Qué es exactamente lo que quieres que sea dot_cha? Si es la entrada que buscas, esto funcionaría.

 $(this).parent().find('.datepickerIG').val(); 

Si es el texto del td .html () o .text () le dará esto.

val recupera el valor de input y otras tags que tienen este atributo. En su caso, .dot es la clase de una fila de tabla que no tiene ningún value atributo … Por lo tanto, debe usar .text() o .html() .

Yo diría que el problema es que

no tiene un valor, contiene HTML.

Esa sería la razón por la cual .html funciona y .val no.

Usas .val en las entradas que tienen valores, pero

no es una entrada, es solo una etiqueta HTML.

val() se debe usar con elementos de formulario (como input , textarea , etc.), no con elementos.

Necesita obtener el innerHTML o innerText del elemento.

Algo como:

 var dot_cha = $(this).parent().find('.dot').text(); 

Aunque debe asegurarse de tener un elemento, ya que puede obtener una colección de elementos.

De los documentos :

El método .val () se usa principalmente para obtener los valores de elementos de formulario como entrada, selección y área de texto. En el caso de los elementos, el método .val () devuelve una matriz que contiene cada opción seleccionada; si no se selecciona ninguna opción, devuelve nulo.

De la documentación de jQuery API :

El método .val () se usa principalmente para obtener los valores de elementos de formulario como input , select y área de textarea .

val se usa en elementos de formulario. Como .dot es un elemento td (que no es un elemento de formulario), usar val on no funcionará. Para obtener el contenido de cualquier elemento que no sea un elemento de formulario, utilice .html o .text

El doc aquí dice

El método .val () se usa principalmente para obtener los valores de elementos de formulario como entrada, selección y área de texto.

Tienes razón .html funciona ya que en tu caso tienes un td, y deberías usar

 $(".dot").html() 

Espero eso ayude