2014-02-19 80 views
0

我是jQuery的初学者,想知道这是否可行。我有一个名称输入文本框的表单。我想抓住用户输入到该文本框中的内容并将其添加到我的textarea中的第一句。所以文本区域会说亲爱的(无论用户输入什么)。任何推动正确的方向将不胜感激。获取输入文本框的值并将其添加到文本区

<form> 
<label>First Name:</label> 
<input type="text" class="fName" /> 
<br /><br /> 
<label>Last Name:</label> 
<input type="text" class="lName"> 
<br /><br /> 
<textarea>Dear +firstname+</textarea> 
</form> 

我的表单很简单。我还没有尝试过任何东西,但你是如此帮助我走向正确的方向。谢谢。

+1

你到目前为止尝试过什么?你能告诉我们你的代码吗?把它放在这里,并在[jsfiddle.net](http://jsfiddle.net/)上。这当然是可能的但很难回答你的问题,至少不知道你的页面结构。 –

+0

正如答案显而易见的那样,它真的让你感到困惑,你是否在附加jquery事件处理程序和抓取/设置值时遇到问题?你解析textarea的内容是否有问题以替换当前的名字?你需要提供更多关于你的具体问题的信息。 –

+0

乔治,我还没有尝试过任何东西,但我的形式非常简单,将是这个样子



消息的

jdkarate

回答

1

假设输入具有name ID和textarea的具有area一个ID,那么:

$("#name").on("input", function(){ 
    var name = $(this).val(); 
    var msg = "Your message here"; 
    var content = "Dear "+name+", \n" + msg; 
    $("#area").text(content); 
}); 

我会强烈建议不要使用changekeyup 作为input 是一个更全面的检查是否用户改变了一切。

这里是一个JSFiddle example


脚注:

  1. change只响应于模糊(即,用户按压标签或点击输入之外)。
  2. keyup只适用于按键,所以它不会在用户粘贴鼠标时注册。
  3. input寄存器任意更改为输入。

更新

按我与@GeorgeMauer讨论,这里是推荐的方法:

$("input.full-name").on("input", function(){ 
    var full_name = $(this).val(); 
    var form = $(this).closest("form"); 
    var message = form.find(":input.message"); 
    var content = message.val(); 
    var lines = content.split("\n"); 
    lines[0] = "Dear " + full_name + ","; 
    var new_message = lines.join("\n"); 
    message.val(new_message); 
}); 

请参阅更新JSFiddle example

这有附加好处,即在不添加任何额外的JavaScript的情况下重新使用表单。它也工作得更好(例如,您可以自由编辑两个输入)。

+0

感谢您的帮助 – jdkarate

+0

@ jdkarate请忽略我的第一个方法并看到更新 – rybo111

1

试试这个:

$('input').keyup(function() { 
    $('textarea').text($(this).val()); 
}); 
+0

他想“将它添加到第一句“尽管我认为他*真的希望在第一行结尾。另外我会小心地提醒他使用过于广泛的选择器。他是一个新手,因此毫无意义给他提供建议,这将导致很难立即发现错误。 –

+0

他要求一个正确的方向。我试图给他如此。 –

+1

这真的不是。你假设他的大问题是如何获得价值观和价值观,但他没有给我们足够的信息去了解这一点。对他来说,更大的问题可能是如何替换textarea中的值,这将涉及编写一个基本的模板系统,在这里你知道以前的值是什么,并将其替换为第一行。 –

1

你可以尝试这样的事情:

<script> 

    $(function() { 

     $("#name").change(function() { 
      $("#textAreaId").append($("#name").val()); 
     }); 

    }); 

</script>  

希望它可以帮助你!

+0

请参阅我对其他答案的评论 - 这不是他正在寻找的。 –

0

编辑:对于你的情况,它看起来并不像你正确设置你的表格。表单用于提交一组信息,然后将这些信息放在其他地方 - 它需要去的地方。因此,我将您的textarea移到了表单之外。

我建议设置你的HTML像这样:

<form id="target" action> 
    <label>First Name:</label> 
    <input type="text" id="fName" /> 
    <br /><br /> 
    <label>Last Name:</label> 
    <input type="text" id="lName" /><br><br> 
    <input type="submit" value="Submit"/> 
    <br /><br /> 
</form> 
<textarea id="message"></textarea> 

这里是我使用jQuery的:

$('form#target').submit(function(e) { 
    e.preventDefault(); 
    var message, firstName, lastName; 

    message = "Dear "; 
    firstName = $('input#fName').val(); 
    lastName = $('input#lName').val(); 

    message += firstName + ' '; 
    message += lastName + ','; 
    $('textarea#message').text(message); 
}); 

注:我改变了你的class属性id因为id的是意味着独特的标签。如果你有多个你想用jQuery一次抓取的东西,那么类就是要走的路。

Preview Here

希望这有助于!

+0

他的信息与他的内容没有分离全部在textarea –

+0

他说:“我想抓住用户输入到该文本框中的内容并将其添加到我的第一句textarea“,这听起来像是两个组件是分开的,那现在你怎么解释Q? –

+0

但是他们也说他们只想修改第一句(这意味着当名称改变时替换),这就是为什么我把对于更多信息的评论,这个问题没有给出足够的信息来真正确定OP所要求的内容 –

0

所以这是一个看似难以解决的问题,因为您正在尝试更新textarea文本的PART部分。 textarea里面没有任何结构,它只是“文本”。所以你问的是什么类似于有一桶乒乓球,在其中之一写一个名字,搅拌桶,然后告诉某人他们必须不断用新的替换命名的球。

虽然有这样做的方法,但它引发了一堆我怀疑你想回答的问题 - 如果他们删除第一行呢?如果他们直接在textarea中更改他们的名字怎么办?如果他们在文本区域多次写下他们的名字会怎么样?如果他们的浏览器使用自上而下写入的语言会怎么样?

除非你准备好回答这些疑问(如果你是你应该可能会开始一个更具体的问题),我建议改变你的方法。例如,我怀疑你希望他们有能力改变第一行。因此,你可以在构造形式如下:

<form> 
    <label>First Name: <input class="first-name" /></label> 
    <label>Last Name: <input class="last-name" /></label> 
    <aside class="salutations">Dear <span class="first-name-salutation"></span></aside> 
    <textarea class="message"></textarea> 
</form> 

通知我搬到你投入的标签(这是做不使用IDS的技术上是正确的方式),去掉了<br>标签(你应该使用CSS这个),并将称呼变成非用户可编辑的文本。然后你的JavaScript可以简单

$(function(){ 
    $('input.first-name').on('input', function(){ 
    $('.first-name-salutation').text($(this).text()); 
    }); 
}) 

然后在前面加上"Dear "+firstName线到服务器上的消息。

另外我会指出它不再是2009年了,没有理由直接使用jquery来处理这样的事情,当有优秀的框架,不会强迫你手动执行许多事情,如KnockoutAngular

+0

由于您正在编辑HTML,因此如果页面上的其他输入具有相同的类别,则最好通过ID引用而不是类别。 – rybo111

+0

@ rybo111我不同意。 ID应该仅保留用于您认识的事实的元素**是HTML规范强制要求的唯一页面实例。有重复的ID时,许多工具将无法正常工作。我们是否知道这是页面上的窗口小部件的唯一实例还是没有使用类似语义的另一个窗口小部件?不,现在你说的肯定是我的代码的一个问题,但我更喜欢unique-ish类,并且可能会在脚本的前面选择DOM上下文,并将它用作第二个jquery参数 –

+0

您提出了一个关于重用代码。我最初的想法是,ID对于初学者来说很容易引用,但灵活是一个很好的习惯。我已经更新了我的回答,以反映我们对此的讨论。 – rybo111

0

请问您是否熟悉AJAX?如果是,那是最好的使用方法。

+0

试试这个请http://stackoverflow.com/questions/20086092/update-textarea-from-user-input-by-jquery-and-ajax。 –

相关问题