سؤال

مع خريطة Google Map V2، أود أن أكون قادرا على تشغيل وظيفة عند النقر فوق نص في Infowindow لممارس Smarker.

$(".foo").click(myFunction);

...

marker.openInfoWindowHtml("<span class=\"foo\">myText</span>");

لا يعمل. لماذا لا يتم القبض على الحدث داخل Infowindow؟

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

المحلول

إذا تم استدعاء مكالمة ملزمة الحدث قبل الدعوة إلى OpenInfowindowhtml كما هو الحال في مثالك، فإن الفترة غير موجودة في DOM بينما كانت المكالمة الأولى تبحث عن عناصر مع الفئة "FOO"، لذلك لم يتم إرفاق أي معالج.

يمكنك إما أن تتحرك معالج الأحداث التي سيتم استدعاؤها بعد OpenInfowindowhtml، أو استخدام "Live" ملزمة بحيث يقوم JQuery بمراقبة DOM لأي عناصر جديدة مع المحدد المحدد.

$(".foo").live('click', myFunction);

نصائح أخرى

لم أستطع الحصول عليها مثل كيفن غورسكي أوضح ...

مع JQUERY 1.9.1 والخرائط API V = 3.EXP Works التالي:

infowindow.setContent('<a href="#" id="test">test</a>');
google.maps.event.addDomListener(infowindow, 'domready', function() {
    $('#test').click(function() {
        alert("Hello World");
    });
});

بقدر ما أعرف، تغرق Gmaps المحتوى في Infowindow برمجيا، لذلك لن يطلق أي معالجات من الأحداث الملزمة بالعناصر المحقونة إلا إذا كنت تستخدم وفد الأحداث:

$(".foo").live("click", myFunction);

انظر live معالجات الأحداث.

جرب هذا:

google.maps.event.addListener(infowindow,"**domready**",function() {
    var Cancel = document.getElementById("Cancel");
    var Ok = document.getElementById("Ok");

    google.maps.event.addDomListener(Cancel,"click",function() {
        infowindow.close();
    });

    google.maps.event.addDomListener(Ok,"click",function() {
        infowindow.close();
        console.log(position);
        codeLatLng(position);
    });
});

حل بسيط والعمل بالنسبة لي. استخدم حدث OnClick في SPAN.

<span class=\"foo\" onclick="test()">myText</span>

function test(){
alert('test OK');
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top