2011-10-14 9 views
11

Tengo problemas para entender por qué esto no funciona. Tengo dos campos en mi formulario y cuando hago clic en un botón, otro valor del campo de texto cambia a ese si la función. ¿Cómo puedo hacer que esto funcione?"TypeError no detectado: el objeto no es una función" en JavaScript

function calculate() 
{ 
    var odometerStart = parseFloat (document.getElementById('odometerStart').value); 
    var odometerEnd = parseFloat(document.getElementById('odometerEnd').value); 
    var distance = document.getElementById('distance'); 
    var amount = document.getElementById('amount'); 

    distance.value = odometerEnd - odometerStart;  
} 

var val = $("#taskentry").validate({ 
    rules: { 
     tripDate: {required: true} 
     tripContact: {required: true} 
     odometerStart: {required: true}  
    } 
}); 


Odometer: Start <input type="number" name="odometer[Start]" id="odometerStart" min="0" max="999999" placeholder="0" class="required"/><br/> 
Odometer: End <input type="number" name="odometer[End]" id="odometerEnd" min="0" max="999999" placeholder="999999" class="required"/><br/> 
Comments <textarea name="comments" id="comments" rows="2" cols="2"></textarea><br/> 
Distance <input type="text" name="distance" id="distance" value="" placeholder="0.00"/><br/> 
<input type="button" name="calculate" value="Calculate" onclick="calculate()"/> 

estoy debuging esto en Google Chrome usando las herramientas de desarrollo y estoy consiguiendo el error "TypeError no detectada: El objeto no es una función" en el punto en el botón de calcular es.

+0

Tu código funciona. Aquí hay un violín para probarlo: nada en JSLint y sin excepciones devueltas - http://jsfiddle.net/YahzF/ – 0x499602D2

Respuesta

-5

Tal vez usted necesita comas:

var val = $("#taskentry").validate({ 
    rules: { 
     tripDate: {required: true}, 
     tripContact: {required: true}, 
     odometerStart: {required: true}  
    } 
}); 
+0

No, las comas no funcionaron :( – user974873

+0

Dijo que tenías un error de sintaxis. Comas propiedades separadas de un objeto, así que guarde esas comas allí. – 0x499602D2

+41

¿por qué se marca esto como la respuesta correcta si el solicitante dice que no funcionó? –

50

Lo siento por la enorme brecha entre su pregunta y mi respuesta :) acabo de recibir el mismo problema y encontré la razón - navegador rellena automáticamente los objetos basados ​​en los atributos de identificación de las etiquetas html en la página. Prueba simple

<div id='test'>Just testing</div> 
<script type='text/javascript'> 
alert(test.innerHTML); 
</script> 

En el caso de que tenían un elemento con id = 'Calcular', renombrar o cambiar el nombre de la función que esté utilizando para los cálculos.

+2

Tenía el mismo problema y esta era mi solución – wmarbut

+0

funcionó para mí. +1 para aceptar esta respuesta –

+0

Esto también me ayudó. –

7

En mi caso, tengo

<input type="button" class="button" id="register" title="register" value="Sign Up!" onclick="register()" />

y da la misma advertencia cuando llamo a la función de JavaScript register(), supongo que está en conflicto con id o title atributos de la etiqueta input, por lo que sólo altere esta función a otro nombre como signup() y funciona.

Espero que ayude. :)

4

Tuve este problema con una función que creé, que funcionaba perfectamente con Firefox y proporcionaba este error con Chrome y Safari. La solución: cambie el nombre de la función. El nombre original era expand(target), reemplazado por expand_compress (destino). Y funcionó. Supongo que la función expand() existe en otro lugar que no sea en Firefox

+2

Es posible que desee tomar nota de [respuesta de Cheery] (http://stackoverflow.com/a/8968495/119477) sobre por qué ese cambio es importante. Probablemente usted tenía una etiqueta html que tenía una identificación de "expandir" –

Cuestiones relacionadas