我正在使用.html()函数创建文本框,但无法获取其值。
var inner_html_content = '<body><p><br>some_text</p> <input type="text" name="rtn_resn" id="retn_rsn" style="width: 80%;""></body>';
$('<div/>').html(inner_html_content);
var value = $(this).find("#retn_rsn").val();
但是它总是返回undefined。如何从文本框中获取值?
答案 0 :(得分:0)
您可以使用.val()
而不是.html()
从输入字段中获取值-尽管由于要使用空值创建该字段,所以将得到空结果:
$('#container').html('<input id="retn_rsn">')
console.log($("#retn_rsn").val()) // empty string
// Now replace it with one that has a value:
$('#container').html('<input id="retn_rsn" value="test">')
console.log($("#retn_rsn").val()) // not empty string
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>
因此,这就是上述操作步骤的完整答案。以下是您获得结果的原因的详细信息:
$('<div>')
与$('div')
您得到undefined
而不是空字符串的原因是这一行:
$('<div/>').html(inner_html_content);
这不会不将HTML插入现有文档中;它会创建一个新的单独的文档片段,并将HTML插入其中。稍后,当您尝试查询主文档时,您将找不到匹配项,因为这不是您添加输入的地方:
var foo = $('<div/>').html("TEST"); // capturing the newly created fragment in `foo`
console.log($('#container').html()) // no change in main document
console.log(foo.html()) // but the separate document fragment exists
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>
您可能打算使用的是:
$('div').html(inner_html_content);
...尽管请注意,这会将html插入页面的每个 div中,这几乎肯定不是您想要的;您应该为插入点使用更具体的选择器。
this
的内容取决于其上下文另一个问题是您在此处使用this
时,它与您的想法无关:
var value = $(this).find("#retn_rsn").val();
在您的问题所示的上下文中,this
引用了window
对象而不是文档正文,因此其上的find()
将不返回任何内容:
console.log(this === window) // true
console.log($(window).find('#container').length) // 0
console.log($(document).find('#container').length) // 1 (the document contains the html, not the window)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>
在其他情况下,this
可以引用其他对象-但与其说出比我在此答案中所涉及的内容还要详尽得多的细节,不如解释它,我只是指出您已经完全不需要使用this
!您要查找的元素具有特定的ID,因此只需使用$('#retn_rsn')
而不是$(this).find('#retn_rsn')
。
<body>
标签在现有文档的正文中插入<body>
标签会导致无效的HTML。幸运的是,jQuery似乎通过悄悄地删除了无效的嵌套<body>
标签来为您解决了此问题:
$('#container').html('<body>...</body>')
console.log($('#container').html()) // `body` tag removed
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>
...但是最好不要一开始就包含它。