【问题标题】:jQuery need refresh to get the html()jQuery 需要刷新才能获取 html()
【发布时间】:2013-09-07 04:03:39
【问题描述】:

我在表单中的每个链接上自动生成输入标记,使链接中的 .html() 成为输入 val()。 我想要获取的文本位于 标记内,这就是我使用 .children() 函数的原因。

问题是这段代码需要刷新页面才能正常工作。但是 var htmltoval return 'undefined' 我尝试将此循环放在 $(document).ready 之前、之后、等等...

我猜是因为元素是动态添加的。

代码如下:

var content_input = '<input class="btn_menu_search" type="radio"/>';
$('form#form_search a').after(content_input);

$('#form_search :input').each(function () {
    var htmltoval = $(this).prev('a').children().html().toLowerCase();
    console.log(htmltoval) // return undefined on first page load 
    // however return the inner html string as expected
    var htmltoval = htmltoval.split(' ').join('');
    $(this).val(htmltoval);
});  

有什么想法吗?

在此处更新 html:

<form method="post" action="#" id="form_search">
                    <h4 class="title"><span><strong>Villes</strong></span></h4>

                        <ul class="list-arrow" id="bienes">
                            <li><a class="bienes"><strong>Paris</strong></a></li>
                            <li><a class="bienes"><strong>Londres</strong></a> </li>
                            <li><a class="bienes"><strong>Tokyo</strong></a></li>
                            <li><a class="bienes"><strong>Moscou</strong></a></li>
                            <li><a class="bienes"><strong>Rio de Janeiro</strong></a></li>
                        </ul>

 <!-- etc-->
</form>

编辑:页面刷新后即使清除缓存也能正常工作。该错误仅在第一次浏览器加载时出现。

【问题讨论】:

  • 可以分享form#form_search的html
  • 确保您的代码在 $(function(){});包装器,也许它在文档实际准备好之前就在运行(因此是未定义的 html)?
  • 谢谢。我尝试所有这些。甚至尝试在 $(document).ready() 中添加延迟 setTimeout() 以确保我们是最后一个被解雇的代码......仍然无法正常工作
  • 你可以为代码创建一个 jsfiddle.net 吗?
  • 嗨,山姆。永远不要使用这个。我会尝试。谢谢

标签: jquery


【解决方案1】:

我不知道它是否会改变某些东西,但我在console.log(htmltoval) 这一行添加了一个分号,并将htmltoval 的声明放在each 循环之外。我还通过使用类来更改循环元素:

var content_input = '<input class="btn_menu_search" type="radio"/>';
$('form#form_search a').after(content_input);

var htmltoval = "";
$('.btn_menu_search').each(function () {
    htmltoval = $(this).prev('a').children().html().toLowerCase();
    console.log(htmltoval); // return undefined on first page load 
    // however return the inner html string as expected
    htmltoval = htmltoval.split(' ').join('');
    $(this).val(htmltoval);
});  

jsFiddle

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
相关资源
最近更新 更多