موتولس:إجراء عمليات رد اتصال من Ajax للعمل مع العنصر الذي تم النقر عليه

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

سؤال

لنفترض أن لدي عددًا من الروابط ذات اللون الأحمر، وأريد إضافة حدث نقرة إليها بحيث عندما يتم تشغيله، يرسل سمة HREF الخاصة بالارتباط إلى الخادم (كطلب AJAX)، وعند النجاح، سيتم تغيير لون الرابط إلى اللون الأخضر.أريد شيئًا مثل:

$$('a.red').addEvent(
    "click",
    function () {
        new Request.JSON({
            url: 'script.php', 
            onSuccess: function(){
                [the link wich is clicked].setStyle('color', 'green');
                return false;
            }
        }).get("url="+[url of the link]);
    }
);

آسف إذا كان السؤال سخيفا.يرجى تعديل العنوان لبعض المعقول.

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

المحلول

المشكلة هنا هي أن this داخل معالج الحدث ليس هو نفسه this داخل فئة الطلب.إذن ما يتم فعله عادةً هو تغيير المرجع إلى this في متغير جديد، على سبيل المثال var self = this.

بعد ذلك يمكنك استخدام self.setStyle('color', 'green');

بالمناسبة، الاقتراح الأفضل هو أن يكون لديك أيضًا فئة للون الأخضر وتبديلها عند النقر.

إذن هنا اقتراح الكود سيكون:

$$('a.red').addEvent("click", function (event) {
    var self = this;
    event.stop();
    new Request.JSON({
        url: 'script.php',
        onSuccess: function () {
            self.removeClass('red').addClass('green');
            return false; // I added event.stop(), presume that is what you meant. Do this line can be removed
        }
    }).get("url=" + self.href);
});

واستخدامه في CSS شيء مثل:

.green {
    color: green;
}

مثال

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