首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何精简/改进/美化我的自动表单JS代码?

如何精简/改进/美化我的自动表单JS代码?
EN

Stack Overflow用户
提问于 2009-08-03 22:28:19
回答 3查看 175关注 0票数 0

我有一个Javascript (dojo)函数,用于自动填充表单。其思想是传入一个JS对象,其中包含表单域is的键,以及帮助定义如何填充该域的值。

它可以工作,但在我看来有点难看( switch语句,对象内的对象语法)。对如何改进这段代码有什么想法吗?

代码语言:javascript
复制
/**
 * Fill in the form with passed in values
 *
 * @param {Object} defaults 
 *
 * Can be used to pass in default values to the form. Expects an object like this:
 *      {<field id>: {type: '<field type>', value:'<value>'}
 *
 *      for example:
 *      {
 *      paymethod: {type: 'select', value:'Account Transfer'},   // html select
 *      fundsource: {type: 'combo', value:'Corporation Account'} // dijit.comboBox
 *      }
 */
function fillDefaults(defaults) {
    var props;
    for (var field in defaults) {
        props = defaults[field];
        switch (props['type']) {
            // so far only select and combo have been implemented 
            // others will be added as needed
            // and maybe grouped depending on how they work 
            // (e.g. all dijits together, <input> with <select>, etc.)
            case 'select':
                dojo.byId(field).value = props['value'];
                dojo.byId(field).onchange()
                break;
            case 'combo':
                dijit.byId(field).attr('value', props['value']);
                break;
        }
    }
}

*改进:使更漂亮,更像js,更像dojo,更流线型

EN

回答 3

Stack Overflow用户

发布于 2009-08-03 22:38:44

漂亮是什么意思?js-是什么样的?

switch虽然占用大量内存,但如果您计划扩展更多的对象,它会更简洁。

也许,不是开关,而是一个包含函数的对象:

代码语言:javascript
复制
funcs = {
  select: function(value) {
    dojo.byId(field).value = value;
    dojo.byId(field).onchange()
  },
  combo: function(value) {
    dijit.byId(field).attr('value', value);
  }
};

function payFillDefaults(defaults) {
  var props;
  for(var field in defaults) {
    props = defaults[field];
    if(funcs[props['type']]) {
      funcs[props['type']](props['value']);
    }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2009-08-03 23:22:31

根据JSLint标准进行了一些改进:

代码语言:javascript
复制
function fillDefaults(defaults) {
    var props, field;
    for (field in defaults) {
        props = defaults[field];
        switch (props.type) {
        case 'select':
            dojo.byId(field).value = props.value;
            dojo.byId(field).onchange();
            break;
        case 'combo':
            dijit.byId(field).attr('value', props.value);
            break;
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2009-08-04 02:00:55

看一看dojox.form.manager --它实现了您想要实现的目标。它支持现有的表单小部件("main" mixin)、几乎所有的DOM表单元素(node mixin)、统一的事件处理等。它可以与未修改的表单一起使用。

正如您可能已经猜到的那样,它被构造为一组独立的混合,因此您只能选择所需的功能。为了方便起见,这里有一个将所有混合组件组合在一起的类:Manager

阅读它的功能,看看它是否适合你的需要,如果不是,研究它的代码并借用你喜欢的东西。如果它遗漏了什么-在the mailing list (on gmane.org)上分享你的反馈。或者,如果你能改进它,回馈一下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1224937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档