无法访问.html()jQuery函数编写的HTML输入框的值?

时间:2012-02-22 20:52:59

标签: javascript jquery

我无法使用jQuery访问HTML Input元素的值,这个输入元素最初是在早期函数中使用.html()函数编写的。

这是我创建输入元素的代码 - 没有这个问题

<script type="text/javascript">
           $(document).ready(function() {
            $("#model").change(function()
                {                                
                 $.post("../includes/_ajaxSpecs.php",{ model:$(this).val() } ,function(data)
                 {
                var string = data;
                var partsArray = string.split(',');
                   $("#comp_specs").fadeTo(200,0.1,function() //start fading the messagebox
                   {
                    //add message and change the class of the box and start fading
                   $(this).html(partsArray[0]+"<input style='width:12em;margin-left:5px;border:1px solid #CCC;' name='input1' id='input1' /><br />"+partsArray[1]+"<input style='width:12em;margin-left:5px;border:1px solid #CCC;' name='input2' id='input2' /><br />").addClass('jText').fadeTo(900,1);
                     });
                  });
                });
              });
</script>

现在我想获取#input1中的值,并使用以下代码将不同的输入框(#new_input)设置为该值:

<script type="text/javascript">
$(document).ready(function() {
$("#input1").change(function()
        {
    var text = $("#input1").val(); 
    $("#new_input").val(text);      
        }); 
});

我不知道为什么我无法在#input1和#input2中访问这些值,即使我在最终的POST中看到它们很好? JQuery访问.html()函数编写的表单元素是否存在问题?我使用列出的第二个函数,并且知道这适用于标准表单元素...

更新:根据您的建议,这是我的更新代码,但仍然无法抓住它?

<script type="text/javascript">
$('#div1').on('change', '#input1', function() {
    $("#input1").change(function() {

    var text = $("#input1").val(); 
    $("#new_input").val(text);      
        }); 
});
</script> 

更新:已解决,谢谢@Dragon

3 个答案:

答案 0 :(得分:3)

您在$(文档).ready上调用$(“#input1”)上的更改但尚未创建$(“#input1”)。使用jQuery's on() function将更改事件绑定到它,以便一旦它存在就会触发。

$(document).on("change", "#input1", function(event){
    var text = $("#input1").val(); 
    $("#new_input").val(text);   
});

答案 1 :(得分:2)

不,发生的事情是你的jQuery代码在页面加载时被执行。此时,#input1和#new_input不存在。

你想要像

这样的东西
$('#containingDiv').on('change', '#input1') function()
{
}

否则可能在写入字段后注册$('#input1')。change() - 可能是$('#model')末尾的回调。更改?

答案 2 :(得分:1)

像其他人指出的那样,你在创建之前将事件处理程序绑定到'#input1'元素。在创建后将其绑定,或者将其绑定到文档,并使用“#input1”作为上下文。或者,您可以将它绑定到任何足够长的父元素,以查看绑定处理程序并调用它的完整循环。

$(document).ready(function() {
$(document).on('change', "#input1", function()
        {
    var text = $("#input1").val(); 
    $("#new_input").val(text);      
        }); 
});

这就是全部。有关详细信息,请http://api.jquery.com/on/