2013-07-03 14 views
0

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


我不知道如何在这里插入评论(试过* /和/ /没有骰子)这么裸露在这里。在第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'); 
    } 

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

    +0

    显示一些更相关的代码,比如你如何调用'newIssue'函数,以及你期望发生什么。 – Jamiec

    +0

    列出@Jamiec上面的电话 –

    回答

    0

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

    Javascript is not Java。事实上,从这里开始,我将以它的正式名称ECMAScript来称呼它。

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

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

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

    最后,'json'字符串在大括号和逗号之后是$.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'); 
        } 
    
    +0

    龙对我来说更好,我不介意学习新的东西,我特别不介意更受教育的人教我这些新事物。我很欣赏你把这个答案放进去的时间,我会研究这个信息。 –

    +0

    有没有更好的方式来执行命令而不使用Ajax?我不太确定这行代码试图从“/ new/newIssue/14 /'网址抓取什么,或者不管它是什么,这是否意味着该页面上列出了单独的代码? –

    +0

    AJAX指的是当Javascript代码从服务器检索数据而不加载新页面,因此,如果你需要在页面加载后通过Javascript *加载数据,那么需要AJAX –

    0

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

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

    +0

    感谢您的解释 –