简单的JQuery语法问题

时间:2012-05-04 02:56:12

标签: jquery variables syntax

我的代码部分完美无缺

var image_mini = $('#map_mini');
var image_full = $('#map_full');

function state_change(data) { 
   // This is just part of code which show idea
   image_mini.mapster(data.state);
}

// This is full block of code, works correct
$("#map_full").mapster(
     $.extend({}, options, {
         onStateChange: state_change
     })
);

现在我需要增强函数state_change,以便用图像变量填充第二个agrument,这将使用直接写入的image_mini。

像这样(下面的代码是错误的),但是使用CORRECT语法代码:

function state_change(data, working_image) {  
  working_image.mapster(...);
}

$("#map_full").mapster(
     $.extend({}, options, {
         onStateChange: state_change, image_mini
     })
);

我觉得我很懒,但我没有找到正确的sintax的例子,因为在这样的onStateChange中传递了两个变量......我尝试了一些想法,但它没有正常工作。 请帮忙!

============================== 稍后补充:

看起来我的想法没有被正确理解,所以我写了更多的代码:

var image_mini = $('#map_mini');
var image_full = $('#map_full');

function state_change(data, working_image) {  
  working_image.mapster(data.state);
}

$("#map_full").mapster(
     $.extend({}, options, {
         onStateChange: state_change, image_mini
     })
);
$("#map_mini").mapster(
     $.extend({}, options, {
         onStateChange: state_change, image_full
     })
);

这是我想要的想法:两个图像都必须交叉,因此两个图像上的变化都会显示出来。

onStateChange: state_change, image_full

这是错误的,我询问该任务的正确语法。

2 个答案:

答案 0 :(得分:1)

它可能不那么漂亮,但您可以使用以下方式执行此操作:

$.extend({}, options, {
    onStateChange : function (e) {
        state_change(e, image_mini);
    }
})

修改

要解释一下,您的第一个版本的代码如下所示:

function state_change(data) {
    // ...
}
// ...
$.extend({}, options, {
    onStateChange : state_change
})

这里发生的事情是,只要onStateChange触发,它就会调用state_change函数。如果这遵循一般的jQuery说法,则该函数将jQuery事件对象作为函数的第一个参数传递。在这种情况下,该事件对象将在data函数声明中解析为state_change参数。

我上面的代码遵循相同的逻辑:

onStateChange : function (e) {
}

因此,当onStateChange触发时,它将调用该匿名函数,并将事件对象作为第一个参数传递。这将在处理函数内解析为e。因此:

onStateChange : function (e) {
    state_change(e, image_mini);
}

...对事件对象执行大部分相同的操作。触发onStateChange事件时,处理程序将事件对象作为e获取,然后将其传递给state_change的调用。因此,data会在state_change内解析,并且不会更改您使用原始函数的方式。

但是,通过这种方式,我们可以自由地将其他参数传入state_change的调用,例如投入image_mini或其他任何内容。

答案 1 :(得分:0)

您正在将image_mini作为您正在定义的JSON对象中的新项目放入。那不行。如果你想让它引用地图,你应该能够将该参数移动到state_change函数的第一行

因为jQuery要对问题做一个基本的函数调用,你应该有这样的东西:

    function state_change(data) {
    var image_mini = $("#mapMini");
    fullStateChange( data, image_mini );
}

function fullStateChange( data, image_mini ) {
    // Do stuffs here

    // This is just part of code which show idea
    image_mini.mapster(data.state);
}

// This is full block of code, works correct
$("#map_full").mapster(
      $.extend({}, options, {
            onStateChange: state_change
      })
);