我正在定制一个由其他人使用WYSIWYG构建的网站。我坚持使用带有javascript的href。
如何点击此锚标记,捕获href,将其值更改为#
,preventDefault,然后实际运行最初要运行的内容?我知道这有点奇怪,但它目前导致IE错误,我相信它会修复它。
HTML:
<a class="cpMonthNavigation" href="javascript:CP_refreshCalendar(3,1,2012);"><<</a>
jQuery的:
$(document).click({namespace: this}, function (e) {
var t = e.data.namespace;
if ($(e.target).is($(".cpMonthNavigation"))) {
e.preventDefault();
$(e.target).attr("href").replace(/javascript:/i, "");
// This is where I need to manually run the function that was in the HREF
}
}
请注意,我无法编辑HTML。我坚持不懈,这很可怕。
我需要阻止默认,以便供应商代码不运行但仍然运行href中的实际内容。供应商代码中的幕后有很多事情与点击此锚点绑定。
答案 0 :(得分:1)
试试这段jQuery代码:
$(".cpMonthNavigation").click(function (e) {
e.preventDefault();
var expression = $(this).attr("href");
eval(expression);
$(this).attr("href", "#");
};
答案 1 :(得分:1)
我可能会比需要更简单,但只需运行该函数,防止默认值:
$(document).on('click', 'a.cpMonthNavigation', function(e) {
e.preventDefault();
var myHref = $(this).attr("href");
myHref = myHref.replace(/javascript:/i, "");
var myNewFunc = myHref.replace(/javascript:/i, /""/i);
eval(myNewFunc);
});
这里有一个工作示例: http://jsfiddle.net/MarkSchultheiss/Vta56/
编辑:上述较短版本:
$(document).on('click', 'a.cpMonthNavigation', function(e) {
e.preventDefault();
eval($(this).attr("href").replace(/javascript:/i, ""));
});
答案 2 :(得分:0)
您可以使用eval
来调用该功能。但这在Javascript Programming
中被认为是一种不好的做法。
我能想到的另一种方法是,在对象中定义函数,如
var operations = {
CP_refreshCalendar : function(mm, dd, yyyy){
//your code
}
}
然后,从click事件处理程序中,您可以执行
$(document).click({namespace: this}, function (e) {
var t = e.data.namespace;
if ($(e.target).is($(".cpMonthNavigation"))) {
e.preventDefault();
var hrefVal = $(e.target).attr("href").replace(/javascript:/i, "");
var funcName = hrefVal.substring(0, hrefVal.indexOf('(') - 1);
var args = hrefVal.substring(hrefVal.indexOf('('), hrefVal.index(')') - 1);
args = args.split(',');
if(funcName in operations){
operations[funcName].apply(window, args);
}
}
}
可能是我正在制作这个复杂的节目。但我不会使用eval
。
我希望这有帮助。