Jquery附加和javascript链接

时间:2014-07-27 11:45:42

标签: 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 <= _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的简写

2 个答案:

答案 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>');