Mi código es
function getID( swfID ){
if(navigator.appName.indexOf("Microsoft") != -1){
me = window[swfID];
}else{
me = document[swfID];
}
}
function js_to_as( str ){
me.onChange(str);
}
Sin embargo, a veces mi onChange
no se carga. Errores de Firebug con
me.onChange no es una función
Quiero degradar con gracia porque esta no es la característica más importante en mi programa. typeof
da el mismo error.
¿Alguna sugerencia sobre cómo asegurarse de que existe y luego solo ejecutar onChange
?
(Ninguno de los métodos a continuación, excepto intentar capturar un trabajo)
javascript
Alec Smart
fuente
fuente
Respuestas:
Intenta algo como esto:
o mejor aún (según el comentario votado por UpTheCreek)
fuente
undefined
excepción en el JavaScript. Lo intenté.typeof window.alert === 'object'
.if (me.onChange) { // do something }
?me.onChange
podría ser cualquier cosa que se evalúetrue
, no necesariamente una función (por ejemplo, podría ser un booleano, una cadena, etc.). Por ejemplo, ver jsfiddle.net/j5KAF/1Tuve este problema
seguía arrojando un error de referencia si obj no estaba definido.
Al final hice lo siguiente:
Un colega me señaló que verificar si es
!== 'undefined'
y luego=== 'function'
es redundante, por supuesto.Más simple:
Mucho más limpio y funciona muy bien.
fuente
ReferenceError
? Eso me parece ilógico.ReferenceError
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Si está utilizando eval para convertir una cadena en función, y desea verificar si este método evaluado existe, querrá usar typeof y su cadena de función dentro de una evaluación :
No invierta esto e intente un typeof en eval . Si haces un ReferenceError se lanzará:
fuente
var a = 'alert'; window[a]('it works');
Qué tal si:
p.ej
o en cuanto a su caso:
Ver documentos de MDN .
fuente
lastIndexOf()
cadena (sabemos, eso es, pero teóricamente)typeof String().lastIndexOf === "function"
es verdad, pero'lastIndexOf' in String
es falsa.Intenta
typeof
: busca'undefined'
decir que no existe,'function'
para una función. JSFiddle para este códigoO como si:
O con un valor de retorno, en una sola línea:
fuente
No vi esto sugerido: me.onChange && me.onChange (str);
Básicamente, si me.onChange no está definido (lo que será si no se ha iniciado), entonces no ejecutará la última parte. Si me.onChange es una función, me ejecutará.onChange (str).
Incluso puedes ir más allá y hacer:
en caso de que yo también sea asíncrono.
fuente
fuente
&&
cuida algo que el jQuery estáisFunction
en el lado derecho de la&&
no?Para mí la forma más fácil:
fuente
if ((typeof window["function_name"] !== 'undefined') && ((typeof window["function_name"] === 'function'))) { return true; } else { return false; }
pero es un ajuste menorIré un paso más allá para asegurarme de que la propiedad sea realmente una función
fuente
fuente
Me gusta usar este método:
Uso:
fuente
La biblioteca Underscore.js lo define en el método isFunction de la siguiente manera (los comentarios sugieren que pueden satisfacer algunos errores del navegador)
http://underscorejs.org/docs/underscore.html#section-143
fuente
O
fuente
Poner doble signo de exclamación es decir !! antes del nombre de la función que desea verificar. Si existe, devolverá verdadero.
fuente
En pocas palabras: atrape la excepción.
Estoy realmente sorprendido de que nadie haya respondido o comentado sobre Exception Catch en esta publicación todavía.
Detalle: Aquí hay un ejemplo en el que trato de hacer coincidir una función que tiene el prefijo mask_ y el sufijo del campo de formulario "nombre". Cuando JavaScript no encuentra la función, debe arrojar un ReferenceError que puede manejar como desee en la sección de captura.
fuente
Sin condiciones
fuente
Sospecho que
me
no se está asignando correctamente la carga.Mover la llamada get_ID al evento onclick debería encargarse de ello.
Obviamente, puede atrapar aún más como se mencionó anteriormente:
fuente
Siempre reviso así:
simplemente colóquelo antes de cualquier código que use esta función
fuente
Tuve el caso donde el nombre de la función variaba de acuerdo con una variable (var 'x' en este caso) agregado al nombre de las funciones. Esto funciona:
fuente
Este simple código jQuery debería hacer el truco:
fuente
He intentado la respuesta aceptada; sin embargo:
devuelve 'indefinido'. He notado que la especificación establece un evento llamado 'onchange' en lugar de 'onChange' (observe el camelCase).
Cambiar la respuesta original aceptada a la siguiente funcionó para mí:
fuente
Si está buscando una función que sea un complemento jQuery, debe usar $ .fn.myfunction
fuente
También he estado buscando una solución elegante a este problema. Después de mucha reflexión, encontré este enfoque mejor.
const func = me.onChange || (str => {}); func(str)
;fuente
(me.onChange||(_=>_))()
ejecutará la función si existe, de lo contrario no hará nada.me.onChange && me.onChange()
evitar definir una función nula.¡Javascript moderno al rescate!
Es posible que esto no tenga una gran posibilidad de ser visto con la larga lista de respuestas, pero ahora se resuelve * a nivel de idioma con la nueva sintaxis de encadenamiento opcional
Es tan simple como eso:
onChange
solo se llama si existe .Si
onChange
no existe, no sucede nada y la expresión regresaundefined
, por lo que si tiene un valor de retorno que de lo contrario usaría, simplemente puede verificar este valor!== undefined
antes de continuar.Edge caso advertencia - si
onChange
lo hace existe, pero es no una función, se obtiene unaTypeError
. Esto es lo que cabría esperar, es lo mismo que tratar de llamar a cualquier no función como función, pero vale la pena señalar explícitamente que el Encadenamiento opcional no hace ninguna magia para que esto desaparezca.* Bueno, técnicamente hablando Opcional Chaining sigue siendo una propuesta de la etapa 4 TC39, por lo que aún no está en la especificación ECMAScript, pero la etapa 4 significa que está finalizada y su inclusión está esencialmente garantizada, solo está esperando que se envíe una nueva versión. Puede usar la sintaxis en su versión final hoy a través de Babel con la confianza de que no cambiará. ¡Incluso en Typecript!
fuente
Aquí hay una solución simple y funcional para verificar la existencia de una función y activar otra función dinámicamente ;
Función de disparo
y ahora puedes generar la función dinámicamente tal vez usando php como este
ahora puede llamar a la función usando un evento generado dinámicamente
el código HTML exacto que necesita es
fuente
fuente
Y luego está esto...
fuente
Prueba este:
Tenga en cuenta que he escrito esto con mi teléfono celular. Puede contener algunos problemas en mayúscula y / u otras correcciones necesarias como, por ejemplo, el nombre de las funciones
Si desea que una función como PHP verifique si la var está configurada:
fuente
Para ilustrar las respuestas anteriores, aquí hay un fragmento rápido de JSFiddle:
fuente
fuente