jqueryappend和一个javascript链接

jqueryappend和一个javascript链接,javascript,jquery,Javascript,Jquery,我正在从客户端的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

我正在从客户端的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;
  });
};
loadSubjects=function(){
返回导入数据(“themen”,函数(){
var i,_i,_ref,_结果;
_结果=[];

对于(i=_i=0,_ref=data.themen.themen.length-1;0您遇到了
的问题。请更改此设置

 $("#subjectBtns").append('<a href="javascript:generateSubjectOverview("' + data["themen"]["themen"][i]["dateiName"] + '");" class="btn btn-mghg">' + data["themen"]["themen"][i]["name"] + '</a>');
$(“#subjectBtns”)。追加(“”);
对此

 $("#subjectBtns").append('<a href="javascript:generateSubjectOverview(\"' + data["themen"]["themen"][i]["dateiName"] + '\");" class="btn btn-mghg">' + data["themen"]["themen"][i]["name"] + '</a>');
$(“#subjectBtns”)。追加(“”);

要在单击链接时调用函数,请使用
单击
事件,而不是尝试生成包含参数的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"])
);
…从
数据
对象中查找值,并将该值绑定到
生成子对象概述
,设置
单击
处理程序以调用生成的绑定函数。结果是相同的,但不会对JavaScript源代码进行不必要的往返,因此这不仅适用于字符串和数字,b不管你想通过什么样的论证



注意:
Function#bind
是ES5的一项功能。如果您仍然需要支持非常旧的浏览器(例如IE8),可以对其进行填充。搜索“Function bind shim”“查找选项。

您不能从AJAX回调返回结果。当服务器响应时,回调函数异步运行。@Barmar:我认为
return
必须返回
jqXHR
对象(或者可能是某种承诺)。Ben正在传递回调。(嗯……但是,为什么
在回调结束时返回_结果;
呢?也许
导入数据
会处理这个问题。)他说,
importData
只是
$.getJSON
的简写。除非它将回调包装到另一个函数中,并对返回值进行处理,否则它不会被使用。@Barmar:有时人们会说“速记”即使在做一件小事的时候也不例外。Ben是唯一一个真正能回答问题的人,但他清楚地意识到需要回调。
return\u results;
只是因为我在coffeesctipt中写作。它总是返回代码块中的最后一件事。这些斜杠做什么?斜杠允许显示字符
在一个介于
”字符串“
之间的字符串中,
null
中的作用是什么。单击(generateSubjectOverview.bind(null,数据[“themen”][“themen”][i][“dateiName”]))
do?@Ben:
Function#bind
的第一个参数决定了调用原始函数时此
将是什么:在松散模式下,如果它是
未定义的
null
,则调用原始函数时,此等于全局对象(
窗口
,在浏览器上)。(在严格模式下,值按原样使用。)您提供的任何其他参数
bind
都会传递给被调用的函数。因此,在松散模式下,如果执行
var-bound=foo.bind(null,1,2);
然后执行
bound('a','b','c');
foo
调用时使用
this
作为全局对象和参数
1,2,'a','b','c'
generateSubjectOverview.bind(null, data["themen"]["themen"][i]["dateiName"])