2011-10-12 28 views
1

我目前正在试图用jquery操纵两种不同类型的控件(标签和输入)的内容。截至目前,我正在通过使用两个命令来做到这一点。需要一个结合val()和text()的命令

if(true) 
{ 
    myControl.text('@types.Text'); 
    myControl.val('@types.Text'); 
} 

是否有一个命令都可以做?

附注:我已经试过了HTML()和append(),但我觉得这些都是对文本()和Val()

+0

什么'myControl.text( '@ types.Text')|| myControl.val( '@ types.Text')'? –

回答

3

我用这样的事情在我的JavaScript公用事业

$.fn.setValue = function(val) { 
    return this.each(function() { 
     switch (this.tagName.toLowerCase()) { 
      case "input": 
       switch ($(this).attr("type").toLowerCase()) { 
        case "hidden": 
        case "password": 
        case "text": 
         $(this).val(val); break; 
        case "radio": 
        case "checkbox": 
         this.checked = val; break; 
       } break; 
      case "span": 
      case "button": 
      case "label": 
       $(this).html(val); break; 
      case "select": 
      case "textarea": 
       $(this).val(val); break; 
     } 
    }); 
}; 

然后你可以使用你的新功能有没有几乎任何类型的元素不必担心它是什么。

var myControl = $('#someSelector'); 
myControl.setValue('@Types.text'); 
+0

很棒的回答。我做的只是将按钮移动到输入部分。我不确定长远来看这是否会更好,但对我来说这很有效。 –

+1

@dan_vitch:很好,我错过了“输入”部分的“按钮”类型。底部的“按钮”情况用于'

0

没有命令与val()结合text()变化。为此编写自定义函数有什么问题吗?顺便说一句:虽然text()html()几乎相同,val()append()是非常不同的 - 检查jQuery文档。

2

你可以写你自己的,是这样的:

$.fn.tval = function (value) { 
    if (this.is(':input:not(:checkbox):not(:radio)')) { 
     this.val(value); 
    } 
    else { 
     this.text(value); 
    } 
    return this; 
} 
0

,如果你也想支持VAL(的get侧)和文本():

$.fn.tval = function(value) { 
    if (value) { 
     if (this.is(':input:not(:checkbox):not(:radio)')) { 
      this.val(value); 
     } else { 
      this.text(value); 
     } 
     return this; 
    }else{ 
     if (this.is(':input:not(:checkbox):not(:radio)')) { 
      return this.val(); 
     } else { 
      return this.text(); 
     } 
    } 
}