كيفية إيقاف انقر الأحداث من تنفيذ في جافا سكريبت وظيفة؟

StackOverflow https://stackoverflow.com/questions/292723

سؤال

واني اسعى الى تعيين الحدث onclick إلى علامة مرساة موجود بالفعل عند النقر على عنصر آخر. ومع ذلك، كل شيء لقد حاولت يبدو أن يؤدي إلى إطلاق الحدث مباشرة بعد التعيين. نحن نستخدم النموذج وScriptaculous.

وهذه هي الوظيفة:

<script type="text/javascript">     
    function loadData(step, dao_id) {
        var div_id = 'div_' + step;
        var anchor_id = 'step_anchor_' + step;
        var prv = step -1;

        switch(step) {
            case 1:
                var action = 'major_list';
                break;
            case 2:
                var action = 'alumni_list';
                break;
            case 3:
                var action = 'alumnus_display';
                break;
        }

        new Ajax.Request('awizard.php', {
                method: 'get',
                parameters: {action : action, dao_id : dao_id},
                onSuccess: function(data) {
                    $(div_id).innerHTML = data.responseText;
                    //$(anchor_id).observe('click', loadData(prv, dao_id, true));
                    //Event.observe(anchor_id, 'click', alert('I executed'));

                    showStep(step);

                    //$(anchor_id).onclick = loadData(prv, dao_id, true);
                    //$(anchor_id).observe('click', loadData(prv, dao_id, true));

                }
            }
        )                   
    }

    function showStep(step, toggleBack) {

        var div_id = 'div_' + step;
        if(!toggleBack) {
            if(step != 1) {
                var prv = step -1;
                Effect.SlideUp('div_' + prv, { duration:1, delay:0 });
            }

            Effect.SlideDown(div_id, { duration:1, delay:1 });
            Effect.Appear('step_anchor_' + step, { duration:1, delay:2 });
        } else {

            var prv = step -1;
            Effect.SlideDown('div_' + prv, { duration:1, delay:0 });
            Effect.SlideUp(div_id, { duration:1, delay:1 });
            Effect.Fade('step_anchor_' + step, { duration:1, delay:2 });
        }               
    }
</script>

وكما يمكنك أن تقول لقد حاولت عدة طرق لتعيين الحدث onclick إلى علامة مرساة واحدا منهم يعمل بشكل صحيح. في البداية أنا افترض أن وظيفة Effect.Appear على البطاقة مرساة يمكن اطلاق الحدث onclick، لذلك حاولت تحريك مهمة الحدث بعد الدالة showStep ولكن ذلك لم يحدث أي فارق. بالإضافة إلى ذلك، حاولت استدعاء توقف () وظيفة مباشرة بعد الاحالة ولكن ذلك لم يحدث أي فارق سواء.

وأنا في بلدي دهاء تنتهي مع هذا. هل هناك أي وسيلة بالنسبة لي لتعيين الحدث onclick إلى العلامة مرساة دون الحاجة النار الحدث تلقائيا؟ ما أفعل الخطأ؟

هل كانت مفيدة؟

المحلول

وظائف هي أول كائن الفئة في جافا سكريبت، وهذا يعني أنك يمكن التنازل عنها لمتغيرات أو تمريرها كوسائط إلى وظائف أخرى. في التعليمات البرمجية الخاصة بك، كنت الخلط تدعو ظيفة مع إشارات إلى وظائف.

ونلقي نظرة على هذا الرمز:

$(anchor_id).observe('click', loadData(prv, dao_id, true));

وهذا ما لا لها بالمرور نتيجة الدعوة إلى "loadData" إلى وظيفة مراقبة. ما تريد القيام به هو تمرير إشارة إلى استدعاء دالة بدلا من ذلك. يمكنك إصلاحه بسهولة عن طريق تغيير رمز لهذه:

$(anchor_id).observe('click', function() { loadData(prv, dao_id, true) } );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top