سؤال

في صفحة الويب الرئيسية الخاصة بي (Viewer.aspx) لدي علامة نصية JavaScript مثل هذا

<script language="javascript" type="text/javascript">

function initialize() {
     var map = $find('Map1');           
     map.add_mouseMove(mouseMove);  

 }

</script>

ضمن علامات البرنامج النصي هذه لدي وظيفة. هل من الممكن استدعاء وظيفة أخرى في علامة نصية مختلفة مثل هذا؟

<script language="javascript" type="text/javascript" src="Resources/JavaScript/proj4js-combined.js">

function mouseMove(sender,eventArgs) {
     var source = new Proj4js.Proj('EPSG:3116');
        var dest = new Proj4js.Proj('WGS84');

        var p = new Proj4js.Point(px, py);
        Proj4js.transform(source, dest, p);    
 }

</script>
هل كانت مفيدة؟

المحلول

وفقًا لتعليقك ، إليك ما تتحدث عنه TJ - تحتاج إلى تحويل كتلة البرنامج النصي الثانية إلى شيء مثل هذا:

<script type="application/javascript" src="Resources/JavaScript/proj4js-combined.js"></script>
<script type="application/javascript">

function mouseMove(sender,eventArgs) {
     var source = new Proj4js.Proj('EPSG:3116');
        var dest = new Proj4js.Proj('WGS84');

        var p = new Proj4js.Point(px, py);
        Proj4js.transform(source, dest, p);    
 }

</script>

... ولكن يجب عليك حقًا نقل كتلة الكود المضمّن (ما هو داخل الثانية <script> علامة في إجابتي) إلى ملف JavaScript خارجي.


تحرير 1: ما هي خلفية البرمجة التي تأتي منها؟ إذا كان الأمر يشبه C# أو Java ، فستحتاج إلى نسيان ما تعرفه عن هؤلاء والتعامل مع JavaScript بشكل مختلف تمامًا. JavaScript هي لغة تفسير ، وليست لغة مجمعة ؛ من بين أشياء أخرى ، هذا يعني ذلك الترتيب الذي يتم فيه إعلان وظائفك مسائل.

عندما أقول "إعلان الوظيفة" ، أعني أي شيء يشبه هذا:

function myNewFunction()
{
   // anything else here
}

هذا يخبر مترجم JavaScript حول وظيفة جديدة ، تسمى myNewFunction, ، الذي يتكون جسده من كل ما هو في الأقواس المجعد.

إليك مثال على ما أتحدث عنه عندما أقول إنك تستخدم وظيفة قبل أن تعلن ذلك. ضع في اعتبارك الكتلة التالية من الكود (بمعزل عن أي JavaScript ، على سبيل المثال ، في ملف JavaScript خارجي):

function foo() // this line declares the function called "foo"
{

}

function bar() // this line declares the function called "bar"
{
    foo(); // this line invokes the previously declared function called "foo"
}

هذا سوف يعمل كما هو متوقع ، لأن foo() تم إعلانه قبل أن تدعوها. ومع ذلك ، فإن ما يبدو (يبدو) تحاول القيام به هو مماثل لهذا:

function foo() // this line declares the function called "foo"
{
    bar(); // this line tries to invoke the function called "bar"
           // but it hasn't been declared yet! so it's undefined
}

function bar() // this line declares the function called "bar"
{

}

إذا كنت ستدير هذا المقتطف الثاني JavaScript ، فلن ينجح ذلك ، لأنك تتصل بوظيفة قبل إعلانها.*

*الحاشية: هذا ليس هو الحال في الواقع ، لأن استخدام هذا الجملة (function foo() { ... }) هل شيء مميز وسحري في جافا سكريبت. مثالتي الخاصة ستعمل فعليًا ، لكنه يوضح المشكلة التي تواجهها.

نصائح أخرى

نعم ، يتم ذلك بانتظام تمامًا حيث يمكن وضع وظائف JavaScript في ملفات أخرى وسحبها إلى صفحات تعمل بهذه الطريقة.

تحدد علامة البرنامج النصي الثانية src. سيتم تحميل محتويات ملف .js وتحليلها ، ولكن الكود داخل علامة البرنامج النصي ( mouseMove وظيفة) سيتم تجاهلها. إذا كنت تريد كل من الوظيفة ومحتويات ملف .js ، فأنت بحاجة إلى فصلهما إلى علامتين سيناريو مختلفان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top