是否可以在javascript函数中包含事件?

时间:2011-03-21 07:43:15

标签: javascript events function jqgrid

我只是想知道是否从一个主javascript获取一个jqgrid事件并使用另一个函数形式的javascript分开它会工作吗?我想要做的就是这样。我有一个代码:

     ...//some code here
     serializeGridData: function(postData) {
        var jsonParams = {
            'SessionID': $('#eSessionID3').val(),
            'dataType': 'data',
            'recordLimit': postData.rows,
            'recordOffset': postData.rows * (postData.page - 1),
            'rowDataAsObjects': false,
            'queryRowCount': true,
            'sort_fields': postData.sidx
        };

        if (postData.sord == 'desc')
        {
            ...//some code here
        }           
        else
        {
            ...//some code here
        }

        return 'json=' + jsonParams;
    },

    loadError: function(xhr, msg, e) { 
        showMessage('errmsg');
    },
            ...//some code here

我想获取此代码并将其写入另一个javascript文件并将其作为一个函数,以便我的其他文件可以使用这个...它可能吗?

我在我的其他javascrtip文件中创建了这样的内容,我计划将所有功能都放在其中。这是代码(functions.js):

function serialLoad(){
   serializeGridData: function(postData) {
      var jsonParams = {
         'SessionID': $('#eSessionID3').val(),
         'dataType': 'data',
         'recordLimit': postData.rows,
         'recordOffset': postData.rows * (postData.page - 1),
         'rowDataAsObjects': false,
         'queryRowCount': true,
         'sort_fields': postData.sidx
      };

      if (postData.sord == 'desc')
      {
          ...//some code here
      }           
      else
      {
          ...//some code here
      }
      return 'json=' + jsonParams;
   },

   loadError: function(xhr, msg, e) { 
       showMessage('errmsg');
   }
}

这不起作用并显示消息语法错误。我不知道如何纠正这个问题。有谁可以帮助我。?

3 个答案:

答案 0 :(得分:2)

首先回答你的问题。如果在 functions.js 文件中定义了一些全局变量,例如myGlobal

myGlobal = {};
myGlobal = serializeGridData: function(postData) {
    // ... here is the implementation
};

你可以在另一个必须包含在 functions.js 文件中的JavaScript文件中使用它:

serializeGridData: myGlobal.serializeGridData

(只需在jqGrid定义中使用此参数)。

如果您想将serializeGridData参数与大多数jqGrids中的值一起使用,则可以在 functions.js 文件中覆盖默认值serializeGridData

jQuery.extend(jQuery.jgrid.defaults, {
    datatype: 'json',
    serializeGridData: function(postData) {
        // ... here is the implementation
    },
    loadError: function(xhr, msg, e) { 
        showMessage('errmsg');
    }
});

在示例中,我另外默认datatype: 'xml' jqGrid参数为datatype: 'json'。它显示了您可以设置任何jqGrid参数的默认值。

我真正需要的是使用prmNames jqGrid参数来重命名标准jqGrid参数的一些defaulf名称。例如

prmNames: {
    rows:"recordLimit",
    sort: "sort_fields",
    search:null,
    nd:null
}

您将标准rows参数重命名为recordLimitsidx重命名为sort_fields,并删除要发送的_searchnd参数。

此外,您可以使用postData将某些属性定义为函数(有关详细信息,请参阅here)。例如:

postData: {
    SessionID: function() {
        return $('#eSessionID3').val();
    },
    rowDataAsObjects: false,
    queryRowCount: true,
    dataType: 'data',
    recordOffset: function() {
        var pd = jQuery("#list2")[0].p.postData;
        return pd.recordLimit * (pd.page - 1);
    },
    json: function() {
        var pd = jQuery("#list2")[0].p.postData;
        return {
           SessionID: $('#eSessionID3').val(),
           dataType: 'data',
           recordOffset: pd.recordLimit * (pd.page - 1),
           rowDataAsObjects: false,
           queryRowCount: true,
           sort_fields: pd.sort_fields
        };
    }
}

我在这里使用了您当前使用的json参数,并直接在将要发送的参数列表中添加SessionIDqueryRowCount等参数。当然,仅发送一种方式(json或其他方式)就足以发送您需要的附加信息。

答案 1 :(得分:0)

您正在混合函数声明和对象文字表示法。此语法:property: value在使用对象文字表示法创建对象时使用:

var obj = {
   prop: val,
   prop2: val
};

serializeGridDataloadError是某个对象的属性,您无法通过将它们放入函数来定义它们。

一种方法是创建两个函数,一个用于serializeGridData,另一个用于loadError,例如。

function serialLoad(postData){
  var jsonParams = {
     //...
  };

  if (postData.sord == 'desc') {
      //... some code here
  }           
  else {
      //... some code here
  }
  return 'json=' + jsonParams;
}

function onError(xhr, msg, e) { 
   showMessage('errmsg');
}

然后您可以将其他文件中的它们分配给对象:

// ... some code here
serializeGridData: serialLoad,
loadError: onError,
//... some code here

另一种方法是将有问题的对象传递给函数并在那里分配属性:

function attachLoadHandler(obj) {
    obj.serializeGridData = function(postData) {
        //...
    };

    obj.loadError = function(xhr, msg, e) {
        //...
    };
}

然后你必须将你创建的对象传递给该函数:

attachLoadHandler(obj);

但我认为第一种方法更容易理解。

答案 2 :(得分:0)

第二个例子是不正确的,因为你声明一个javascript对象是一个函数的主体,你可以做的是:

function serialLoad() {
    // Return an object with the required members
    return {
        serializeGridData: function(postData) { ... },
        loadError: function(xhr, msg, e) { ... }
    };
}