我将描述我的问题,希望有人可以提供解决方案。
我正在向现有页面添加GreaseMonkey脚本,该页面使用ajax加载带有onclick的元素:
onclick="getProperty('http:/...')"
我搜索了一种方法来覆盖他们的getProperty,这本身很难,因为我无法知道在通过ajax到达之前这个onclick会有什么对象。 我无法绑定自己的点击并取消绑定前一个点击,因为当内容是动态时,没有触发此类功能。我尝试添加我的点击并阻止前一个被调用,这不起作用。 我正在使用的选择器如下所示:
a[onclick^='getProperty']
我发现的是一个人为这个确切的问题写的方法,叫做waitForKeyElements。我希望这里有人已经熟悉它。 它的作用是检查ajax是否将与选择器匹配的元素添加到页面中,如果是,则运行一个函数。
这个方法让我解决方法绑定我的函数来覆盖它们:
waitForKeyElements("a[onclick^='getProperty']", updateToNewGetProperty);
function updateToNewGetProperty(ajaxLinks){
ajaxLinks.each(function(){
var oldOnclick = $(this).attr("onclick");
var UrlStartPos = oldOnclick.indexOf('\'') + 1;
var UrlEndPos = oldOnclick.indexOf('\'',UrlStartPos);
var Url = oldOnclick.substring(UrlStartPos,UrlEndPos);
$(this).attr("onclick", ""); // unbind
$(this).click(function() { // bind mine
myGetProperty(Url);
return false;
});
});
}
这是有效的,它取消绑定以前的javascript onclick并设置jquery点击。
然而,我发现他们的代码的另一部分抓住了onclick中的URL值,所以我不能使用jquery click bind,因为它会使onclick为空。
我不得不回到:
$(this).attr("onclick",$(this).attr("onclick").replace('getProperty', 'myGetProperty'));
这会返回单击链接时未定义的函数,我相信因为原始页面在完全加载了greasemonkey之前加载了ajax内容。在我的函数注册之前触发waitForKeyElements。
非常感谢任何帮助/建议