2009-07-31 20 views
85

Cuando uso DatePicker, plugin de interfaz de usuario jQuery, en una página .aspx existente tengo errores que selector de fechas no es una función.":

$("#datepicker").datepicker is not a function 

Sin embargo, cuando Copio y pego el mismo código que crea y usa el datePicker en un archivo HTML que también está en el mismo directorio que la página aspx, funciona sin problemas. Esto me lleva a suponer que hay algunos archivos JS en la página aspx que impiden que datePicker o tal vez los archivos JQ UI de jQuery se carguen correctamente.

¿Alguien puede confirmar mis creencias o dar algún consejo sobre cómo encontrar el culpable que interfiere con los complementos de UI de jQuery?

+0

¿Puede publicar el código jQuery relevante, por favor –

+0

¿Cómo está incluyendo el complemento datepicker en la página, está en un ScriptManagerProxy o lo está escribiendo directamente en la página? ¿Estás seguro de que se está cargando? Si es así, ¿qué otros complementos estás incluyendo? ¿Estás seguro de que has incluido ui.core.js? –

+12

Encontré el problema. Desearía haber encontrado esta solución ayer al oponerme a 1 hora después de publicar esta pregunta. El código JS que he escrito hace referencia al archivo jQuery y jQuery UI Javascript actuó como un módulo. Su padre también hace referencia a jQuery en la parte inferior de la etiqueta de cuerpo (por lo tanto, 2 referencias a jQuery). Dado que jQuery se reinicializa después de jQuery UI, jQuery UI se borra como un complemento, por lo que mi código no pudo encontrar el plugin DatePicker. – burnt1ce

Respuesta

158

Luché con un problema similar durante horas. Resultó que jQuery se incluyó dos veces, una vez por el programa al que agregué una función jQuery y otra por nuestro depurador interno.

+3

Este fue mi problema también. Tuve una referencia a mi propia biblioteca jQuery junto con jQuery Tools CDN que sin saberlo incluía jQuery. – DavGarcia

+0

Este también fue mi problema. Estoy usando superfish y también estaba cargando jquery. No me di cuenta hasta ahora. – rrtx2000

+20

¿Cuál es la solución? –

23

Si hay otra biblioteca que utiliza la variable $, usted puede hacer esto:

var $j = jQuery.noConflict(); 
$j("#datepicker").datepicker(); 

También asegúrese de que su Javascript incluye están en el orden correcto para la biblioteca central jQuery se define antes de la jQuery. ui. He tenido problemas con eso.

+0

También asegúrese de que sus javascript includes estén en el orden correcto para que la biblioteca central de jquery esté definida antes de jquery.ui. He tenido problemas de causa << que es la respuesta correcta para mí. – macaesar

+1

Esto no funcionó aún para mí –

8

Si cree que hay un conflicto, puede usar jQuery.noConflict() en su código. Los detalles están en el docs.

Hacer referencia MAGIC - atajos para JQUERY

Si no te gusta escribir el pleno "jQuery" todo el tiempo, hay algunas alternativas: atajos

Reasignar jQuery a otro atajo var $j = jQuery; (Este podría ser el mejor enfoque si desea utilizar diferentes bibliotecas) Utilice la siguiente técnica , que le permite usar $ en el interior de un bloque de código sin sobrescribir permanentemente $:

(function($) { /* some code that uses $ */ })(jQuery) 

Nota: Si se utiliza esta técnica , usted no será capaz de utilizar métodos de prototipo dentro de este capsuled función que esperar $ para que sea Prototype $, por lo que está haciendo una elección para usar solo jQuery en ese bloque . Utilice el argumento al evento DOM listo :

jQuery(function($) { /*some code that uses $ */ }); 

Nota: Una vez más, dentro de ese bloque no se puede utilizar métodos de prototipo

Thats desde el final de los documentos y podría serle útil

3

¿Ha intentado usar Firebug para 1) determinar que no hay errores de Javascript y 2) que la # fechapunta er elemento existe en la página?

Lo más probable es que haya un error antes de la llamada datepicker que impida la ejecución de la llamada datepicker.

17

Este error suele aparecer cuando falta un archivo del conjunto de jQuery UI.

Comprueba dos veces que tienes todos los archivos, los archivos jQuery UI, así como el CSS y las imágenes, y que están en la ubicación del archivo/directorio correctamente enlazados en tu servidor.

+0

Esta respuesta es la más cercana a la solución que he publicado. – burnt1ce

+0

También podría publicar su comentario como su propia respuesta y aceptarlo algún tiempo después. – random

+0

Nota para usted: asegúrese de que al cambiar de los archivos locales a los archivos CDN de Google, realmente tenga la URL correcta. Es ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js, no ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery-ui.min.js, Dang. – neminem

5

Vaya a lo obvio primero: ¿Hace referencia al archivo jquery-ui.js?

Pruebe usar la pestaña de red de firebug para encontrar si está cargada, o el código de información \ Vista de JavaScript de la barra de herramientas de desarrollador web.

1

Acabo de tener este problema, y ​​mover las referencias JS y el código hacia la parte inferior de la página antes de que la etiqueta </body> lo haya solucionado.

1

También verifique los permisos para el directorio donde descargue los archivos. Por alguna razón, cuando descargué esto, de manera predeterminada, se guardó en una carpeta sin acceso permitido. Me tomó una eternidad darme cuenta de que ese era el problema, pero solo tuve que cambiar el permiso para el directorio y su contenido, configurándolo para TODOS = LEER SOLAMENTE. Funciona muy bien ahora.

0

Me encontré con este problema recientemente: el problema era que había incluido los archivos jQuery UI en la etiqueta head, pero la biblioteca Telerik que estaba usando incluía jQuery en la parte inferior de la etiqueta body (aparentemente reiniciando jQuery) y descargar los complementos de UI previamente cargados).

La solución fue descubrir dónde se estaba incluyendo jQuery en realidad, e incluir las secuencias de comandos de jQuery UI después de eso.

0

Acabo de tropezar con un problema similar. Cuando cambié la referencia de mi script de las etiquetas de cierre automático (es decir, <script src=".." />) a nodos vacíos (es decir, <script src=".."></script>) mis errores desaparecieron y de repente pude hacer referencia a las funciones de la interfaz de usuario jQuery.

En ese momento, no me di cuenta de que esto era solo un codazo de mi cerebro si no lo cerraba correctamente para empezar. (Estoy publicando esto simplemente en caso de que alguien más se encuentre con un problema similar.)

0

Algunos archivos no se cargan antes de llamar.

Por ejemplo: Su código:

<%= javascript_include_tag "distpicker.min" %> 
<%= javascript_include_tag "distpicker.data.min" %> 

Cambio a esta:

<%= javascript_include_tag "distpicker.data.min" %> 
<%= javascript_include_tag "distpicker.min" %> 
2

jQuery “$ (” # selector de fechas “).datepicker no es una función "

He solucionado el problema al colocar los siguientes tres archivos en la sección del cuerpo del formulario al final.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js" type="text/javascript"></script> 
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="Stylesheet" type="text/css" /> 
0

pude solucionar este problema quitando el paquete de jQuery en la _Layout.cshtml

Cabecera

<script src="~/Scripts/jquery-1.10.2.js"></script> 
    <script src="~/Scripts/kendo/2015.2.902/kendo.all.min.js"></script> 
    ... 

pie de página

@Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 

Cambio pie de página a

@Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 
Cuestiones relacionadas