Jquery函数未正确创建新标记

时间:2013-07-03 20:00:02

标签: javascript jquery json function

我必须承认(从我之前的问题可能看出)我对Jquery相对较新。我知道一点Java,但我的知识主要在于CSS和HTML4 / 5。我正在开发一个项目,我需要能够在地图上创建,移动和删除标记。我没有使用google的api地图,而是将其设为自由形式,因此任何计划都可以在理论上运作。然而我到目前为止遇到的问题是我的一个朋友在完成他的项目后借给我代码......我不完全理解我看到的一些东西,我会正常问他但是他正在巡航(他真的把手机留在家里所以没有人会打扰他)。


我不知道如何在这里插入评论(试过* /和//没有骰子),这对我来说是裸露的。在第9行我不明白这个函数抓取器,是抓取页面html还是位于页面上的函数?如果它确实从页面抓取数据这意味着我将不得不重新创建该函数?主要问题是,当我单击标记按钮创建一个新标记按钮时,它会锁定我的光标,但不会让我实际放置标记(就像事件没有被正确调用一样)。

另外,底部的json位...我认为json是一种语言(独立)?


function newIssue(e)
  {
     var pos = $('#plan').offset();
     var x = e.pageX - pos.left;
     var y = e.pageY - pos.top;
     var u = x/$('#plan').width();
     var v = y/$('#plan').height();

 $.get('/new/newIssue/14/' + u + '/' + v + '/' + e.data.kind + '/', function(data)
     {
        var x = eval(data);
        var num = x.number;
        Issue.push({id: num, u: u, v: v, repaired: false, kind: e.data.kind, timestamp: x.timestamp, detailed: true});
        var n = insertIntoCluster(Issue[Issue.length - 1], Cluster, 10);
        reclusterOnAddition(n);
        if (e.data.kind == 'Repairable')
           openIssue(num, true);

        $('#plan-wrapper').css('cursor', 'move');
        $('#plan').unbind('mousedown');
        $("div[id^='m']").show();
        panner.enable();
     }, 'json');
  }

  • 我这样做是很好的,但我的朋友代码工作正常,我能够更好地理解它。基本上你单击链接,它会使光标再次点击时创建一个标记,但是它会启用光标,但是当你再次点击时,没有创建任何东西只是卡在“创建”循环中而没有创建

    2 个答案:

    答案 0 :(得分:0)

    很难理解问题,我在第9行看不到函数grabber。第9行执行jQuery的$.get方法,它执行AJAX request

    此请求指定它期望json返回,这意味着传递给回调函数(data)的参数包含一些json格式的数据。 (顺便说一下,JSON是一种独立的语言 - 它只是Javascript)。

    答案 1 :(得分:0)

    首先是Javascript:Java :: Carpet:Car。

    Javascript 不是 Java。事实上,从现在开始,我将用它的正式名称ECMAScript来称呼它。

    你在这里问了几个问题,但是你开始说你不明白第9行的代码是做什么的。

    在ECMAScript中,您可以将函数作为参数传递给另一个函数。

    $.get从服务器获取数据。参数function(data) { ... }告诉ECMAScript在检索数据时要做什么。请记住,此块中的其他代码将继续执行,并且在调用代码完成之前,将不会执行作为参数传递的函数。 (Google:javascript事件循环)。

    最后,结束括号和逗号后面的'json'字符串是$.get函数的另一个参数。它告诉$ .get它正在处理什么类型的数据,以便可以适当地处理它。

     $.get('/new/newIssue/14/' + u + '/' + v + '/' + e.data.kind + '/', function(data)
         {
            var x = eval(data);
            var num = x.number;
            Issue.push({id: num, u: u, v: v, repaired: false, kind: e.data.kind, timestamp: x.timestamp, detailed: true});
            var n = insertIntoCluster(Issue[Issue.length - 1], Cluster, 10);
            reclusterOnAddition(n);
            if (e.data.kind == 'Repairable')
               openIssue(num, true);
    
            $('#plan-wrapper').css('cursor', 'move');
            $('#plan').unbind('mousedown');
            $("div[id^='m']").show();
            panner.enable();
         }, 'json');
    

    关于JSON是一种完全不同的语言的问题,这是不正确的。 JSON是“JavaScript Object Notation”的首字母缩写。它是一种将数据表示为Javascript(ECMAScript)代码的方法。它严格地是ECMAScript语言的一个子集。

    以下是一些代表汽车信息的JSON示例:

    {
        Year: 2013,
        Make: "Acura",
        Model: "TL",
        IsInService: true
        Drivers: [{
            FName: "Bob",
            LName: "Smith"
        }, {
            FName: "Sue",
            LName: "Smith"
        }]
    }
    

    更新:我知道这个答案运行时间有点长,但我打算以一种可以帮助您更好地了解正在发生的事情来重构此代码:

    function newIssue(e)
      {
         var pos = $('#plan').offset();
         var x = e.pageX - pos.left;
         var y = e.pageY - pos.top;
         var u = x/$('#plan').width();
         var v = y/$('#plan').height();
    
         var ajaxTarget = '/new/newIssue/14/' + u + '/' + v + '/' + e.data.kind + '/';
    
         var callbackFunction = function(data)
         {
            var x = eval(data);
            var num = x.number;
            Issue.push({id: num, u: u, v: v, repaired: false, kind: e.data.kind, timestamp: x.timestamp, detailed: true});
            var n = insertIntoCluster(Issue[Issue.length - 1], Cluster, 10);
            reclusterOnAddition(n);
            if (e.data.kind == 'Repairable')
               openIssue(num, true);
    
            $('#plan-wrapper').css('cursor', 'move');
            $('#plan').unbind('mousedown');
            $("div[id^='m']").show();
            panner.enable();
         };
    
         // Call $.get with three parameters,
         // ajaxTarget: tells $.get where to get data from.
         // callbackFunction: tells $.get what to do with the data.
         // 'json': tells $.get that we are getting json data.
         $.get(ajaxTarget, callbackFunction, 'json');
      }