将输入更改为大写


74

JS:

<script type="text/css">
$(function() {
    $('#upper').keyup(function() {
        this.value = this.value.toUpperCase();
    });
});
</script>

的HTML

<div id="search">
        <input type="radio" name="table" class="table" value="professor" tabindex="1" /> Professor
        <input type="radio" name="table" class="table" value="department" tabindex="2" /> Department
        <input type="radio" name="table" id="upper" class="table" value="course" tabindex="3" /> Course
        <input type="text" name="search" class="keywords" value="Select an option..." onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?':this.value;" tabindex="4"  />
        <div id="content"> </div>
    </div>

为什么这仍然不起作用?只是尝试从JS调用div“ .keywords”。


我希望我有时间在这里提出我认为是最好的答案。它可以处理keypress事件,并在适用时将键代码更改为大写,这比听起来与跨浏览器兼容要容易,但我认为这是最好的解决方案。
Juan Mendes

实际上,我想到的解决方案仅适用于IE ... e。在FF和WebKit中是只读的,但是IE允许您更改e.keyCode。在IE jsfiddle.net/48fSq/1中进行
Juan Mendes

Answers:


251

我认为最优雅的方法是不使用任何JavaScript,但使用CSS。您可以使用text-transform: uppercase(这仅是内联的想法):

<input id="yourid" style="text-transform: uppercase" type="text" />

编辑:

所以,你的情况,如果你想要的关键字是大写的变化: keywords: $(".keywords").val(),$(".keywords").val().toUpperCase(),


2
@Tim-您不允许输入输入有结束标签:w3.org/TR/html401/interact/forms.html#edef-INPUT
Jared

8
用户输入真的是大写还是仅在此处显示?
BiAiB 2011年

38
需要记住的是,使用(仅)JavaScript检索值将返回原始文本。即不是大写。这里的例子
Shaz

23
如果您只是想让它看起来大写,那可能是对的。但是,如果您希望实际的input.value为大写,则必须在提交表单或使用input.value之前进行重复工作,这使其不太美观。
Juan Mendes

6
这个简单的想法使我摆脱了女巫酿造地狱事件互动的火热深处。愿系统风扇的风始终在您的背上,愿散热器将温暖的光芒照在您的脸上。
Jeromy French

52

Javascript字符串对象具有toLocaleUpperCase()使转换本身容易的功能。

这是一个实时大写的例子

$(function() {
    $('input').keyup(function() {
        this.value = this.value.toLocaleUpperCase();
    });
});

不幸的是,这会完全重置文本框的内容,因此用户的插入符号位置(如果不是“文本框的末尾”)将会丢失。

不过,您可以使用一些浏览器切换功能来破解它

// Thanks http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/
function getCaretPosition(ctrl) {
    var CaretPos = 0;    // IE Support
    if (document.selection) {
        ctrl.focus();
        var Sel = document.selection.createRange();
        Sel.moveStart('character', -ctrl.value.length);
        CaretPos = Sel.text.length;
    }
    // Firefox support
    else if (ctrl.selectionStart || ctrl.selectionStart == '0') {
        CaretPos = ctrl.selectionStart;
    }

    return CaretPos;
}

function setCaretPosition(ctrl, pos) {
    if (ctrl.setSelectionRange) {
        ctrl.focus();
        ctrl.setSelectionRange(pos,pos);
    }
    else if (ctrl.createTextRange) {
        var range = ctrl.createTextRange();
        range.collapse(true);
        range.moveEnd('character', pos);
        range.moveStart('character', pos);
        range.select();
    }
}


// The real work

$(function() {
    $('input').keyup(function() {
        // Remember original caret position
        var caretPosition = getCaretPosition(this);

        // Uppercase-ize contents
        this.value = this.value.toLocaleUpperCase();

        // Reset caret position
        // (we ignore selection length, as typing deselects anyway)
        setCaretPosition(this, caretPosition);
    });
});

最终,伪造它可能是最容易的。text-transform: uppercase在文本框中设置样式,使其显示大写给用户,然后在你的JavaScript应用文本转换一次,每当用户插入符焦点离开完全文本框:

HTML:

<input type="text" name="keywords" class="uppercase" />

CSS:

input.uppercase { text-transform: uppercase; }

Javascript:

$(function() {
    $('input').focusout(function() {
        // Uppercase-ize contents
        this.value = this.value.toLocaleUpperCase();
    });
});

希望这可以帮助。


1
+1并没有想到丢失选择问题(也丢失了光标)。当它发生时,这真令人讨厌。这是对我最好的答案
BiAiB 2011年

@Tomalak-在第一个示例中,为什么不使用focusout?
Jared Farrish

1
@Jared:我假设OP希望文本框的内容在用户输入时自动大写。我当然会的。
Lightness Races in Orbit

@Tomalak-Yeesh。修改聚焦非常简单……但这是第一句话。我至少会提出论点,但这不是我的答案,因此只是一个评论。:)
Jared Farrish

1
@SJnawali问题是您没有阅读完整的答案。text-transform: uppercase用于打字期间;当焦点离开控件时,该值将被大写等效值覆盖。
Lightness Races in Orbit

9

如果将其用于html输入,则无需使用JavaScript即可轻松实现!或任何其他JS库。使用CSS标签text-transform将是标准且非常容易的事情:

<input type="text" style="text-transform: uppercase" >

或者您可以使用名为“ text-uppercase”的引导程序类

<input type="text" class="text-uppercase" >

这样,您的代码就简单得多!


8

使用value.toUpperCase的解决方案似乎存在一个问题,即在字段中键入文本会将光标位置重置为文本的末尾。使用文本转换的解决方案似乎存在一个问题,即提交给服务器的文本仍可能是小写字母。此解决方案避免了这些问题:

function handleInput(e) {
   var ss = e.target.selectionStart;
   var se = e.target.selectionEnd;
   e.target.value = e.target.value.toUpperCase();
   e.target.selectionStart = ss;
   e.target.selectionEnd = se;
}
<input type="text" id="txtTest" oninput="handleInput(event)" />


7

也可以这样做,但是其他方法似乎更好,如果您只需要一次,它会派上用场。

onkeyup="this.value = this.value.toUpperCase();"

5

尝试:

$('#search input.keywords').bind('change', function(){
    //this.value.toUpperCase();
    //EDIT: As  Mike Samuel suggested, this will be more appropriate for the job
    this.value = this.value.toLocaleUpperCase();
} );

您需要将结果分配到某个地方,这将无法正常工作,因为用户键入change仅在控件失去焦点时才会触发。
Lightness Races in Orbit

对于用户输入,.toLocaleUpperCase可能更合适。 developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...
迈克·塞缪尔

@迈克·塞缪尔(Mike Samuel)你是真的,我不知道那种方法。希望它是交叉浏览器,因为我在
Msdn

@BiAiB:这个坏了;您没有将文本的大写形式分配给任何内容。
Lightness Races in Orbit

1
@BiAiBtoLocaleUpperCase是跨浏览器可用的,但是它的行为不一定在同一语言环境中的不同浏览器中都相同,因为它显然取决于本地计算机上存在的字符映射的版本。它在EcmaScript语言标准的15.5.4.17节中指定。欢呼声,迈克
Mike Samuel

3

我找不到答案之一中提到的Bootstrap中的大写文本。没关系,我创造了它。

.text-uppercase {
  text-transform: uppercase;
}

这将以大写形式显示文本,但是基础数据不会以这种方式转换。所以在jQuery中

$(".text-uppercase").keyup(function () {
    this.value = this.value.toLocaleUpperCase();
});

无论您在何处使用text-uppercase类,这都将更改基础数据。




1

这个答案有问题:

style="text-transform: uppercase"

还将占位符单词转换为大写字母,这很不方便

placeholder="first name"

呈现输入时,它将“名字”占位符写为大写

FIRST NAME

所以我写了更好的东西:

onkeypress="this.value = this.value + event.key.toUpperCase(); return false;"

效果很好!但是,如果您的JavaScript代码很复杂,则会产生一些副作用,

希望它可以帮助某人给他/她一个想法,以开发更好的解决方案。


1

在这里,我们在输入字段中使用onkeyup事件,该事件在用户释放Key时触发。在这里,我们通过toUpperCase()将值更改为大写函数。

请注意,text-transform =“ Uppercase”将仅更改样式的文本。但它没有价值。因此,为了更改值,请使用将显示以及更改值的此内联代码

<input id="test-input" type="" name="" onkeyup="this.value = this.value.toUpperCase();">

这是证明值已更改的代码段

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<form method="get" action="">
		<input id="test-input" type="" name="" onkeyup="this.value = this.value.toUpperCase();">
		<input type="button" name="" value="Submit" onclick="checking()">
	</form>
	<script type="text/javascript">
		function checking(argument) {
			// body...
			var x = document.getElementById("test-input").value
			alert(x);
		}
		
		
	</script>
</body>
</html>


1
<input id="name" data-upper type="text"/>
<input id="middle" data-upper type="text"/>
<input id="sur" data-upper type="text"/>

在动态创建的元素上的文本位于上方,该元素具有属性upper和发生击键操作时

$(document.body).on('keyup', '[data-upper]', function toUpper() {
  this.value = this.value.toUpperCase();
});

upper不是有效的属性,而是应该data-upper改用。在CSS中将文本转换与类似的东西一起使用的主要原因是,这样用户就不会看到它从小写转换为大写。您的函数也是匿名的,没有必要给它命名:)
zanderwar

0
**JAVA SCRIPT**
<html>
<body>
<script>
function @ToCaps(obj)
{
obj.value=obj.value.toUpperCase();
}
</script>
<input type="text" onkeyup=@ToCaps(this)"/>
</body>
</html>

**ASP.NET**
Use a css style on the text box, write css like this:

.ToCaps {文本转换:大写;}

<asp:TextBox ID="TextBox1" runat="server" CssClass="ToCaps"></asp:Te writxtBox>

**OR**
simply write this code in textbox
<asp:TextBox ID="TextBox1" runat="server" style="text-transform:uppercase"></asp:TextBox>


 **1.Note you don't get intelligence until you type up to style="**  

1
它永远都不会这样工作<script type="text/css">
交换

0

JavaScript有一种toUpperCase()方法。http://www.w3schools.com/jsref/jsref_toUpperCase.asp

因此,无论您认为什么地方最好将其放入代码中,都必须做类似的事情

$(".keywords").val().toUpperCase()

仅针对课程征集,我该怎么做?
Jshee 2011年

有很多方法可以做到这一点。最快,最简单的方法就是将其放入“课程”的案例中。

我该怎么做:case'course':phppage ='course'; ext ='.php?cID ='; 打破;
Jshee 2011年

对不起,我有点困惑如何实现它(就其基本而言)
Jshee 2011年

0

你可以试试这个HTML

<input id="pan" onkeyup="inUpper()" />

Java脚本

function _( x ) {
  return document.getElementById( x );
}
  // convert text in upper case
  function inUpper() {
    _('pan').value = _('pan').value.toUpperCase();
  }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.