Estoy luchando con un problema raro…

Tengo dos páginas (bastante las mismas) donde tengo que desactivar algunas selecciona. En uno de ellos (digamos Una página), yo uso getElementById para recuperar mi elemento, y en la segunda (decir la página B) yo uso getElementsById (con una ‘s’) para recuperar (y funciona en ambos casos).

Lo que es raro es que si puedo usar getElementsById en la página (con la ‘s’), me da el error de «documento».getElementsById no es una función», lo cual es normal porque esta función (con la ‘s’) normalmente no existe. Pero yo no tengo este error en la página B, y si puedo usar getElementById (sin la «s») en esta página, no funciona !?!?

Alguien puede darme una explicación ? (Voy a perder los pocos pelos que quedan en mi cabeza si continúa …)

Gracias de antemano!

Ps: lo Siento por mi pobre inglés!

Edit: Aquí está el código de mis páginas:

Página:

function controleDelaiFranchise (casChoix){
        var estAvecGarantie = <bean:write property="avecGarantie" name="simulationAutonomeForm" filter="false"/>;

        if(estAvecGarantie ==true){

            if(casChoix == 'Emprunteur'){
                document.getElementById("assDelaiFranchiseEmpr").disabled = false;
            }
            else {
                if(casChoix == 'CoEmprunteur'){
                    document.getElementById("assDelaiFranchiseCoEmpr").disabled = false;
                }
            } 
        }
        else{

            if(casChoix == 'Emprunteur'){
                document.getElementsById("assDelaiFranchiseEmpr").disabled = true;
            }
            else {
                if(casChoix == 'CoEmprunteur'){
                    document.getElementById("assDelaiFranchiseCoEmpr").disabled = true;
                }
            } 
        }

Página B:

function controleDelaiFranchise (casChoix){
        var estAvecGarantie = document.getElementsByName("estAvecGarantie")[0].value;

        if(estAvecGarantie){

            if(casChoix == 'Emprunteur'){
                document.getElementsById("assDelaiFranchiseEmpr").disabled = false;
            }
            else {
                if(casChoix == 'CoEmprunteur'){
                    document.getElementsById("assDelaiFranchiseCoEmpr").disabled = false;
                }
            } 
        } else {

            if(casChoix == 'Emprunteur'){
                document.getElementsById("assDelaiFranchiseEmpr").disabled = true;
            }
            else {
                if(casChoix == 'CoEmprunteur'){
                    document.getElementsById("assDelaiFranchiseCoEmpr").disabled = true;
                }
            } 
        }

    }

Edit 2:

Ok, así que cuando no estaba trabajando en la página B (sin la ‘s’) me había

var estAvecGarantie = document.getElementsByName("estAvecGarantie")[0].value;
if(estAvecGarantie){ ... }

Puedo reemplazar con

var estAvecGarantie = document.getElementsByName("estAvecGarantie")[0].value;
if(estAvecGarantie == true) { ... }

y ahora funciona usando getElementById sin la ‘s’

Pero todavía no entiendo por qué se sigue trabajando con este maldito ‘s’ … Así que mi problema está resuelto (ish), pero aún así, si alguien tiene una explicación de por qué se pueden utilizar getElementsbyId() incluso si la función no existe (y, específicamente, en sólo una página), soy todo oídos porque odio cuando no entiendo …

por favor proporcione una Mínimo, Completa y Verificable ejemplo
Ha alguien mono parcheado document en su segunda página? document.getElementsById = document.getElementById; document.getElementById = undefined;?
Por favor defina «no funciona» ¿se obtiene el mismo error, o lo que en realidad sucede?
En la página B, cuando me nos el documento.getElementsById(«assDelaiFranchiseEmpr»).disabled = false; el elemento es en realidad una discapacidad, pero cuando utilizo el documento.getElementById(«assDelaiFranchiseEmpr»).disabled = false; no hace nada (ni siquiera un mensaje de error). Traté de depuración de mod, documento.getElementsById(«assDelaiFranchiseEmpr») devuelve el elemento, pero no con el documento.getElementById(«assDelaiFranchiseEmpr») …
La única razón es porque yo estaba usando getElementsByClass y me olvidé de la ‘s’ cuando he cambiado… Ahora sólo necesito saber ¿por qué es trabajar con esta ‘s’ en esta página en concreto, pero no sin (especialmente porque no existe ningún método como getElementsById con una ‘s’…)

OriginalEl autor Alban Becquet | 2016-09-07

2 Comentarios

  1. 3

    Como se describe por James aquí valores de id tiene que ser único en un documento, por lo que sólo habrá un «elemento» que los partidos, en lugar de varios «elementos».

    Que es la razón, no Debemos usar s mientras que la selección de elementos. Como Id sólo se puede seleccionar de una en una.

    Sin embargo, hay métodos que devuelven varios elementos que utiliza el plural de «elementos», como getElementsByTagName.

    Esperanza de que borra su confusión

    «no Debemos usar s» – Bueno, o más bien, getElement_s_ById de plano no existe en ningún estándar.
    ahh, exactamente..! Simplemente ayudando a la OP con su confusión. Aún no he pensado en getElement_s_ById Gracias.
    Supongo que el punto de la cuestión es: «getElementsById en la página … da … error … Pero no tengo este error en la página B«. O simplemente mi pobre inglés, (o una pobre descripción?).
    y algo la respuesta es, el OP es la creación automática de problema por sí mismo mediante el uso de s. En lugar de tratar de usar la palabra clave estándar que funcione tanto en la página.
    No, por favor, lea la pregunta, OP dice: «… si yo uso getElementbyId (sin la «s») en esta página [B], no funciona«.

    OriginalEl autor BNN

  2. 2

    Lo primero es lo primero:
    Función-, o más bien, methodnames en JavaScript son Sensibles a las mayúsculas. Esto significa que el documento.getElementById no es el mismo documento.getElementbyId.

    Lo más raro:
    documento.getElementsById no exsist en JavaScript, por lo que no puede funcionar de forma predeterminada. La única manera que esto puede funcionar es si alguien crea esta función/método en la otra página. Una más explicación obvia es que usted ha hecho un tipo-o en su segunda página. Tal vez se le olvidó escribir la S y creía que no. Puedes intentar de nuevo?

    He editado mi post, para el primer punto era sólo un tipo-o cuando escribí el post, y puse los dos métodos de javascript. Y yo no se puede encontrar ningún método personalizado llamado getElementsById…
    La línea var estAvecGarantie = <frijol:escritura de propiedad=»avecGarantie» name=»simulationAutonomeForm» filter=»false»/>; no es válido. Usted no puede usar < o > aquí. Tal vez quisiste { de }?
    Es una de los puntales de la etiqueta, que puede ser utilizado aquí (porque es reemplazado lado del servidor), pero no es relevante. He editado mi post de nuevo, una parte del problema era que si la cláusula en la página B, y he corregido antes de la edición de mi post. He editado de nuevo como cuando tuve el problema.
    es casChoix igual a ‘Emprunteur’ o ‘CoEmprunteur’? Porque otra cosa que el getElementsById función no se utiliza nunca. Lo que te da ningún error
    Puede ser uno o el otro

    OriginalEl autor Marc van Nieuwenhuijzen

Dejar respuesta

Please enter your comment!
Please enter your name here