【问题标题】:missing ] after element list json元素列表json之后缺少]
【发布时间】:2013-05-24 17:21:59
【问题描述】:

我正在尝试在 onclick 事件上调用 getPointOnMap 函数并为其提供一个 json 对象作为参数。

这里是代码示例:

$.ajax({
    type: "POST",
    url: "/getResult.json",
    success: function(result) {
        var html = '';
        for (var i = 0; i < result.length; i++) {
            var obj = result[i];
            html += "<input type='checkbox' onClick='getPointOnMap(" + obj + ")'/>" + obj.address + "<br>";
        }
        $("#myDiv").append(html);
    }
});

这里是函数getPointOnMap

function getPointOnMap(object) {
    map.addMarker({
        lat: object.lattitude,
        lng: object.longtitude,
        click: function(e) {
            alert('You clicked in this marker');
        }
    });
}

firebug 输出(也在问题名称中):

SyntaxError: missing ] after element list

getPointOnMap([object Object])

我应该怎么做才能传递正确的对象?

【问题讨论】:

标签: javascript jquery json google-maps google-maps-api-3


【解决方案1】:

我认为不允许重新发布问题,无论如何,您不应通过字符串而是通过 DOM 创建 HTML 输入,因此您可以将处理程序附加到函数而不是“onclick”上。

$.ajax({
    type: "POST",
    url: "/getResult.json",
    success: function(result) {
        for (var i = 0; i < result.length; i++) {
            (function (n) {
                var obj = result[i],
                    element = $("<input>", {type: "checkbox"});
                element.click(function () {
                    getPointMap(obj);
                });
                $(document.body).append(element, obj.address + "<br />");
            })(i)
        }
    }
});

【讨论】:

  • 我可能错了,但不是所有的 getPointMap 调用都会收到最后一个结果 [i] 作为此解决方案的参数吗?你应该测试你的答案。
  • 两个问题:1) append 行不应该在for循环内吗? 2)您必须在element.click(...) 之外创建一个附加范围,并将obj 放在该范围内。否则它将被 for 循环中的以下迭代覆盖,并且所有单击事件都将使用相同的参数调用 getPointMapjsfiddle.net/FCbpm
  • 仅供参考,您可以将$("&lt;input/&gt;").attr("type", "checkbox") 简化为$("&lt;input&gt;", {type: "checkbox"});
  • 谢谢!我不知道这个
【解决方案2】:

好的,简单的方法:

html += "<input type='checkbox' onClick='getPointOnMap(" + obj.lattitude + ", " + obj.longtitude + ")'/>" + obj.address + "<br>";

function getPointOnMap(lat,lng) {
    map.addMarker({
        lat: lat,
        lng: lng,
        click: function(e) {
            alert('You clicked in this marker');
        }
    });
}

【讨论】:

    【解决方案3】:
    $.ajax({
        type: "POST",
        url: "/getResult.json",
        success: function(result) {
             var myDiv = $('#myDiv');
             $.each(result, function(i, obj) {
                 myDiv.append(
                     $('<INPUT>').attr('type', 'checkbox').on('click', function() {
                         getPointOnMap(obj);
                     },
                     obj.address,
                     "<br>"
                 );
             });
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多