我从客户端的json文件生成链接。
loadSubjects = function() {
return importData("themen", function() {
var i, _i, _ref, _results;
_results = [];
for (i = _i = 0, _ref = data.themen.themen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
$("#subjectBtns").append('<a href="javascript:generateSubjectOverview("' + data["themen"]["themen"][i]["dateiName"] + '");" class="btn btn-mghg">' + data["themen"]["themen"][i]["name"] + '</a>');
console.log('appending: ' + '<a href="javascript:generateSubjectOverview("' + data["themen"]["themen"][i]["dateiName"] + '");" class="btn btn-mghg">' + data["themen"]["themen"][i]["name"] + '</a>');
_results.push(false);
}
return _results;
});
};
我也厌倦了onlick而不是href,但那也没有用。我收到错误:
Uncaught SyntaxError: Unexpected end of input
javascript代码看起来有些混乱,但那是因为它是由coffeescript生成的。
函数importData
只是带有路径和回调的$ .getJSON的简写
答案 0 :(得分:2)
要在单击链接时调用函数,请使用click
事件,而不是尝试生成带有参数的JavaScript源,以放在href
上:
$("#subjectBtns").append(
$('<a href="javascript:;" class="btn btn-mghg"></a>')
.click(generateSubjectOverview.bind(null, data["themen"]["themen"][i]["dateiName"]))
.append(data["themen"]["themen"][i]["name"])
);
这一位:
generateSubjectOverview.bind(null, data["themen"]["themen"][i]["dateiName"])
...从data
对象中查找值并将该值绑定到generateSubjectOverview
,设置click
处理程序以调用生成的绑定函数。结果是一样的,但是你没有通过JavaScript源代码进行不必要的往返,所以这不仅适用于字符串和数字,而是适用于您可能希望传递的任何类型的参数。
注意:Function#bind
是ES5功能。如果你仍然需要支持真正的老浏览器(例如IE8),它可以是shimmed。搜索“Function bind shim”以查找选项。
答案 1 :(得分:1)
'
和"
存在问题。改变这个
$("#subjectBtns").append('<a href="javascript:generateSubjectOverview("' + data["themen"]["themen"][i]["dateiName"] + '");" class="btn btn-mghg">' + data["themen"]["themen"][i]["name"] + '</a>');
到这个
$("#subjectBtns").append('<a href="javascript:generateSubjectOverview(\"' + data["themen"]["themen"][i]["dateiName"] + '\");" class="btn btn-mghg">' + data["themen"]["themen"][i]["name"] + '</a>');