Javascript 与KRL&;AJAX
我在这里会说得很具体。如果您转到并执行搜索,并在地图视图中查看结果,则地图上到处都是绘图,右侧还有列表。如果你点击地图上的一个pin,你会看到一个弹出窗口,然后点击MLS,你会看到另一个带有属性描述的弹出窗口。您还可以单击右侧列表上的MLS编号,打开属性描述弹出窗口 我想在弹出窗口的html中添加一个按钮。我可以很好地插入html,但问题是,如何确定属性描述何时加载,以便读取其中的html并添加按钮 截图: 简短回答(我稍后会编辑): 使用该操作可监视选择器Javascript 与KRL&;AJAX,javascript,ajax,krl,Javascript,Ajax,Krl,我在这里会说得很具体。如果您转到并执行搜索,并在地图视图中查看结果,则地图上到处都是绘图,右侧还有列表。如果你点击地图上的一个pin,你会看到一个弹出窗口,然后点击MLS,你会看到另一个带有属性描述的弹出窗口。您还可以单击右侧列表上的MLS编号,打开属性描述弹出窗口 我想在弹出窗口的html中添加一个按钮。我可以很好地插入html,但问题是,如何确定属性描述何时加载,以便读取其中的html并添加按钮 截图: 简短回答(我稍后会编辑): 使用该操作可监视选择器 然后,使用选择时间。我使用了一个
然后,使用选择时间。我使用了一个技巧,在用户单击之前,您不会查找元素。真正棘手的是,地图上卡片上显示的MLS编号链接阻止了点击事件向窗口的传播,因此我无法使用实时点击绑定 我真的病了,所以我不能再熬夜了,但代码注释得相当好,所以你应该能够读懂我的疯狂
规则集a60x561{
元{
名称“utahrealestate”
说明>
作者“迈克·格雷斯”
注销
}
派遣{
域名“utahrealestate.com”
}
规则搜索\u查找\u不动产{
当网页浏览“\/search\/”时选择
前{
}
{
通知(“标题”、“内容”),粘性=真;
发射0)&($cardMls.is(“:可见”)){
控制台日志(“hevercard上的foud mls”);
//注意点击卡上的mls编号
$cardMls.单击(函数(){
log(“mls单击地图pin上方的悬停卡”);
//得到报告!!!
KOBJ.a60x561.getReport();
});
}否则{
setTimeout(函数(){
KOBJ.a60x561.grabMls();
}, 500);
};
};
//抓取房地产清单详细信息,一旦它加载到厚框中
KOBJ.a60x561.getReport=函数(){
如果($K(“#公共报告包装”)。长度>0){
log(“找到列表详细信息!”);
}否则{
setTimeout(函数(){
KOBJ.a60x561.getReport();
}, 500);
};
};
|>;
}
}
}
测试应用程序时firebug控制台的屏幕截图
这比乍一看要复杂一些。有两个方面使得你正在尝试做的事情有点棘手,所以我现在正在研究一个答案。有不同的地图视图。您是如何获得要首先处理的地图视图的?你能发布你所说的特定地图视图的截图吗?截图正是我所指的。谢谢你发布它们。我不确定是否有不同的地图视图。我只是在搜索“阿尔卑斯山,UT”,在地图视图中查看结果。如果执行列表视图并单击view属性,它将为该属性加载一个页面,我将在其中插入一个按钮。这只是一个厚框视图,我不知道如何知道它何时被完全加载以触发js函数。这非常有效。有一个问题,当你点击了一个pin,而一个悬停卡已经打开,所以我做了一个小的修改。除此之外,完美!好极了!是的,我忘了测试那个用例。很高兴我能帮忙。
ruleset a60x561 {
meta {
name "utahrealestate"
description <<
utahrealestate
>>
author "Mike Grace"
logging off
}
dispatch {
domain "utahrealestate.com"
}
rule search_for_realestate {
select when web pageview "\/search\/"
pre {
}
{
notify("title","content") with sticky = true;
emit <|
// sidebar click watching easy
// click event isn't being blocked so we can use .live and not
// worry about HTML being present at time of event listener binding
$K(".full_line a").live("click", function() {
console.log("sidebar mls clicked");
// get the report!!!
KOBJ.a60x561.getReport();
});
// pin on map mls number is a bit harder because click event is
// being blocked from propegating to the window
// to get around this we can
// 1) watch for click on pin
// 2) wait for mls element to load
// 3) attatch our own element level event listener
$K("#mapdiv_OpenLayers_Container image").click(function() {
console.log("pin on map clicked");
// attatch click event listener on mls element once it loads
setTimeout(function() {
KOBJ.a60x561.grabMls();
}, 500);
});
// ATATCH LISTENER TO MLS NUM ON MAP
KOBJ.a60x561.grabMls = function() {
console.log("looking for mls in hovercard");
// grab jQuery reference to element we are looking for
var $cardMls = $K("#property-overview a:first");
// only go on if it's on the page and visible
if ( ($cardMls.length > 0) && ($cardMls.is(":visible")) ) {
console.log("foud mls on hevercard");
// watch for click on mls num on card
$cardMls.click(function() {
console.log("mls clicked on hovercard above map pin");
// get the report!!!
KOBJ.a60x561.getReport();
});
} else {
setTimeout(function() {
KOBJ.a60x561.grabMls();
}, 500);
};
};
// GRAB REALESTATE LISTING DETAILS ONCE IT LOADS IN THICK BOX
KOBJ.a60x561.getReport = function() {
if ($K("#public-report-wrap").length > 0) {
console.log("Listing details found!");
} else {
setTimeout(function() {
KOBJ.a60x561.getReport();
}, 500);
};
};
|>;
}
}
}