كيفية استخدام مسج الحدث انقر فوق تغيير href القيمة بشكل غير متزامن ، على أساس سلمان الاستعلام

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

سؤال

أنا باستخدام بت.لاي خدمة تقصير العناوين تقصير بعض url إرسالها إلى "مشاركة على تويتر" وظيفة.أود أن الحمل قليلا.ly url فقط عندما يكون المستخدم في الواقع يضغط زر مشاركة (بسبب بعض الشيء.ly ماكس 5 موازية reqs القيد). بت.ly بقية API عوائد سلمان رد مع رابط تقصير ، مما يجعل السيناريو كله المتزامن.

لقد حاولت التالية لوقف انقر فوق الحدث ، وانتظر سلمان الدعوة إلى إرجاع القيمة قبل إطلاق انقر فوق.

لدي المبسطة التالية التعليمات البرمجية في مسج(الوثيقة).جاهزة():

تحديث رمز (التبسيط)!

jQuery("#idofaelement").click(function(event) {
    event.preventDefault(); //stop the click action
    var link = jQuery(this);
    bitlyJSON(function(shortUrl) {
        link.attr("href", function() {
          //process shortUrl
          //return finalized url;                   
        }).unbind().click();
    });
});

و البرمجية التالية إلى التعامل مع bitly تقصير (يعمل على ما يرام):

function bitlyJSON(func) {
//
// build apiUrl here
//
jQuery.getJSON(apiUrl, function(data) {
    jQuery.each(data, function(i, entry) {
        if (i == "errorCode") {
            if (entry != "0") {
                func(longUrl);}
        } else if (i == "results") {
            func(entry[longUrl].shortUrl);}
    });
});  
} (jQuery)

Href يحصل قيمته تتغير ، ولكن في المباراة النهائية .الحدث click() لم يحصل من النار.هذا يعمل بشكل جيد عند تحديد قيمة ثابتة بالنسبة href ولكن ليس عند استخدام المتزامن سلمان الأسلوب.

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

المحلول 4

@Tzury شريط Yochay وأشار لي في الاتجاه الصحيح من خلال اقتراح استخدام الموقع.href تحديث عنوان url.أيضا @فيكتور ساعدت مع جوابه.

حصلت الأمور العامل الجمع بين الإجابات ، ولكن كان هناك مشاكل مع التاريخ في فايرفوكس.يبدو أن تحديث نافذة.الموقع في الواقع إعادة توجيه المستخدم ، ولكن أيضا إزالة "مصدر الصفحة" من التاريخ.هذا لم لا يحدث في كروم, رحلات السفاري, ie8, ie8-التوافق أو ie7.

على أساس هذا رد على سؤال آخر كنت قادرا على خلق الحل وإعطاء العمل التالية رمز + بعض التغييرات:

jQuery("#idofaelement").one("click", function(event) {
    bitlyJSON(function(shortUrl) {
        jQuery("#idofaelement").attr("href", function() {
            //process shortUrl
            //return finalized url;                   
        });
        setTimeout(function() {
            window.location = jQuery("#idofaelement").attr("href");
        }, 0);
    });
    return false;
});

شكرا على كل مساعدة!

نصائح أخرى

كما كنت المبينة نفسك:

event.preventDefault(); //stop the click action

وهذا يعني ، المتصفح هو عدم الذهاب إلى هذا العنوان, إذا كنت ترغب في أن تذهب في الواقع إلى الأمام إلى رابط الموقع ببساطة تفعل شيئا مثل:

document.location.href = longurl;

iirc, مسج لا تؤدي إلى "فوق" على العناصر.سأحاول القديمة جيدة "الموقع.href=مهما" في الاستدعاء.

 bitlyJSON(function(shortUrl) {
      link.attr("href", function() {
      //process shortUrl
      //return finalized url;                   
    });
    location.href = link.attr("href");
});

أعتقد أن ما كنت فعلا تريد أن return false; من الحدث انقر فوق منع الفعلية التالية من href, صحيح ؟

مثل:

jQuery("#idofaelement").click(function(event) {
    //event.preventDefault(); //stop the click action
    var link = jQuery(this);
    bitlyJSON(function(shortUrl) {
        link.attr("href", function() {
        //process shortUrl
        //return finalized url;                   
        }).unbind().click();
    });
    return false;
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top