2012-03-30 3 views
1

ich habe 2 Datei js in meiner asp Website namensrufen Sie die gleichen Namen Funktionen in Jquery?

1-jquery.datepick.js 

2-jquery.hijridatepick.js 

diese Datei mit den gleichen Namen Funktionen haben, aber zweiten apear Popup hijricalender Ich nenne es von

<script type="text/javascript"> 
     $(function() { 
      $('[id$=TextBox1]').datepick({ dateFormat: 'dd/mm/yyyy' }); 
     }); 
    </script> 

für textbox2 ich möge 2 verwenden datepick Funktion aus der ersten Datei, wie ICALL es, weil ich die erste Datei als

$('[id$=TextBox2]').datepick({ dateFormat: 'dd/mm/yyyy' }); 

aber diesen Aufruf wieder die Funktion von refrenced zweite Datei ???

Antwort

4

Die zweite Datei überschreibt die erste. Sie müssen den Namen einer der Funktionen ändern, um die Kollision zu vermeiden.

Sie werden so etwas wie dies in den Dateien:

jQuery.fn.datepick = function() { 
    // etc. 
}; 

Dies ist, wo Methode der jQuery-Plugin erstellt wird. Ändern Sie einfach datepick in einer oder beiden Dateien in etwas anderes und einzigartig.

+0

i für jQuery gesucht .fn.datepick aber ich fand fn.datepick was ist damit –

+0

Wie ich schon sagte, es wird so etwas wie 'jQuery.fn.datepick'. Ohne die eigentlichen Dateien zu sehen, ist es schwer mit Sicherheit zu sagen, ob 'fn.datepick' das richtige Stück Code ist, aber wahrscheinlich ist es das. Erstellen Sie einfach eine Sicherungskopie Ihrer Dateien, bevor Sie sie bearbeiten, nur für den Fall. – FishBasketGordo

+0

thank u –

1

Wie in der Antwort von FishBasketGordo erwähnt, überschreibt die zweite zu ladende Funktion die erste, und die Änderung des Namens von one wird dies beheben, jedoch gibt es ein tiefer liegendes Problem, das behoben werden muss.

Der Grund dafür ist, dass die Funktionen dem globalen Namespace hinzugefügt werden. In Javascript ist die Datei, aus der der Code stammt, irrelevant. Eine Möglichkeit vermeiden zu vermeiden, dass der globalen Namensraum verschmutzen ist Funktionen innerhalb eines Objekts zu wickeln, so in Ihrem Fall könnten Sie haben:

/* 1-jquery.datepick.js */ 
datepick = new Object; 
datepick.datepick = function() { 
    /* function definition here */ 
    alert('first file function'); 
}; 

/* 2-jquery.hijridatepick.js */ 
hijridatepick = new Object; 
hijridatepick.datepick = function() { 
    /* function definition here */ 
    alert('second file function'); 
}; 

Diese Funktionen können dann unter Verwendung zugegriffen werden:

datepick.datepick(); 
/* alerts 'first file function' */ 

hijridatepick.datepick(); 
/* alerts 'second file function' */ 
+0

Sorry, aber ich thinked, dass es funktionierte aber nicht so das erste code du meinst ich schreibe es in js dateien oder bearbeite etwas darin wenn ich es addiere werde ich aber wo genau und danke dir. –

+0

@David Mason - Dies sind gute Punkte, aber denken Sie daran, die beiden Dateien sind jQuery-Plugins, so dass sie den globalen Namespace nicht verschmutzen. Sie verschmutzen den jQuery-Namespace. Indem Sie die beiden Funktionen in separate Objekte aufteilen, würden Sie einen Großteil der Macht hinter dem jQuery-Plugin-Mechanismus verlieren, was ein harter Kompromiss ist. – FishBasketGordo

+0

kann mir jemand helfen? –

Verwandte Themen