Estoy tratando de entender por qué la primera línea JQuery NO cambia el texto de la etiqueta, pero la segunda línea JQuery sí. Pensamientos?

@Html.Label("lblTestLabel", "Old value I want replaced")


<script type="text/jscript">

    function PopulateTradeStats(result)
    {        
        $("#lblTestLabel").text('ThisWayDoes_NOT_Work');

        $("label[for='lblTestLabel']").text("ThisWayWorks!");       
    }

</script>
2
KeelRisk 15 jun. 2017 a las 04:21

3 respuestas

La mejor respuesta

No soy desarrollador ASP, pero parece que @Html.Label("lblTestLabel", "Old value I want replaced") solo crea una etiqueta con el atributo for.

SALIDA: <label for="lblTestLabel">Old value I want replaced</label>

Necesitarías hacer esto para que el primero funcione

@Html.Label("Old value I want replaced", new { id = "lblTestLabel", for = "lblTestLabel" })

SALIDA: <label id="lblTestLabel" for="lblTestLabel">Old value I want replaced</label>

Sin embargo, sería una mala idea, ya que presumiblemente también está utilizando @Html.TextBox("lblTestLabel") o un método similar HtmlHelper para generar un control de formulario para la propiedad asociada que generaría html no válido (atributos id duplicados) y significa que cualquier javascript para seleccionar el control de formulario no funcionaría

También asegúrese de que la identificación lblTestLabel sea única , ya que $("#lblTestLabel") solo devolverá la primera coincidencia (si tiene más de 1 elemento con la misma identificación)

Ver ejemplo a continuación:

function PopulateTradeStats(result) {
  $("#lblTestLabel").text('ThisWayDoes_NOT_Work');

  /* $("label[for='lblTestLabel']").text("ThisWayWorks!"); */
}
PopulateTradeStats();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<label id="lblTestLabel" for="lblTestLabel">Old value I want replaced No.1</label>
<br>
<label id="lblTestLabel" for="lblTestLabel">Old value I want replaced No.2</label>
1
Dalin Huang 15 jun. 2017 a las 02:35

Eso es porque @ Html.Label (..) crea resultados como:

<label for="lblTestLabel">Old value I want replaced</label>

No hay atributo de identificación en la cadena HTMl generada. ha agregado id como parámetro de atributo html en html helper para que esto funcione.

e.g. @Html.Label("..", new {id = "LabelID"})
0
Jaimin Dave 15 jun. 2017 a las 06:30

¡Ambas formas seguramente funcionan!

A menos que tenga otro elemento en su DOM con la misma identificación lblTestLabel, y supongo que tiene su <input id="lblTestLabel" ...>

Luego, cuando llama a $("#lblTestLabel").text('ThisWayDoes_NOT_Work'); una selección para el atributo ID, siempre devuelve un solo elemento, entonces está tratando de cambiar un texto de otro elemento en lugar del que desea.

Si bien este código $("label[for='lblTestLabel']").text("ThisWayWorks!"); busca una etiqueta que apunte a un elemento lblTestLabel y funcionará todo el tiempo.

0
Ramon Marques 15 jun. 2017 a las 01:42