问题描述
在当前页面添加一个垂直手风琴特效,结果加载页面时,无法触发元素的click事件。
发现问题
在检查代码逻辑无明显错误后,利用浏览器检查功能发现了问题。在点击元素后,浏览器报错。
解决方案
在百度之后产生了灵感,就是jq的版本可能与页面调用的某些库冲突或者jq调用的函数可能被改写覆盖。
我突然意识到,之前页面为了扩展解析HTML模版改写的parseHTMLTemplate。而恰好
Object.prototype.parseHTMLTemplate = function (functionObject) {
return function (scope) {
return functionObject.toString().match(/\/\*([\s\S]*?)\*\//)[1].replace(/\$\{\w.+\}/g, function (variable) {
var value = scope;
variable = variable.replace('${', '').replace('}', '');
variable.split('.').forEach(function (section) {
value = value[section];
});
return value;
});
}
};
而恰好在报错中发现了parseHTMLTemplate字段,随即决定试一下。
很简单,就是不改写原型,而是另外写一个function myparseHTMLTemplate
,经测试同样可以实现所需扩展功能。而且手风琴功能可以运行。
function myparseHTMLTemplate(functionObject){
return function (scope) {
return functionObject.toString().match(/\/\*([\s\S]*?)\*\//)[1].replace(/\$\{\w.+\}/g, function (variable) {
var value = scope;
variable = variable.replace('${', '').replace('}', '');
variable.split('.').forEach(function (section) {
value = value[section];
});
return value;
});
}
}
总结
轻易不要改写JQ内的方法。