获取动态添加的文本框值时出现奇怪的错误?

时间:2016-01-23 14:02:15

标签: javascript jquery html

使用jQuery,我附加文本框如下: -

$.each(myDataJSON, function (index, value)
    {
           var newRow = "<tr><td><input type='text' class='txtBox' value="+value.Price+"/></td></tr>";          
        $('#myTable').append(newRow);
    })

现在追加行后,会呈现所需的html。现在我将模糊事件与这些文本框相关联,如下所示: -

$(document).on('blur','.txtBox',function(e)
{
    var newTextValue = $(this).val();
    console.log(newTextValue);//this throws below error 
    //Uncaught TypeError: Cannot read property 'toLowerCase' of undefined
});

但是,如果我尝试修补它。然后上面的错误消失,但它没有反映新的更新值,而是旧值。仅对于第一个动态添加的文本框,它会提供新的更新值,但不会提供其他文本框。

    $(document).on('blur','.txtBox',function(e)
{
    var newTextValue = $('.txtBox').val();
    console.log(newTextValue);//no error 
});

奇怪的是,当我在检查窗口中检查html时,没有更新任何文本框值。

我的问题是

如何获取动态添加文本框的文本框的更新值

另外, 是否有除焦点/模糊之外的任何事件,以便我可以获取更新的文本框值,当用户离开文本框时,无论是否等待文本框外的点击事件

3 个答案:

答案 0 :(得分:0)

尝试手动执行该功能时失败“,因为您有不同的this。事件指向调用者

你必须做

$(document).on('blur','.txtBox',function(e)
{
    var newTextValue = $(e.target).val();

});

答案 1 :(得分:0)

此代码适用于我(记录正确的值):

<html>
<body>
    <table id = "myTable">
    </table>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
    var newRow = "<tr><td><input type='text' class='txtBox' value='1.1'/>     </td></tr>";          
    $('#myTable').append(newRow);

    var newRow1 = "<tr><td><input type='text' class='txtBox' value='1.2'/></td></tr>";          
    $('#myTable').append(newRow1);

    $(document).on('blur','.txtBox',function(e)
{
    var newTextValue = $(this).val();
    console.log(newTextValue);//this throws below error 
    //Uncaught TypeError: Cannot read property 'toLowerCase' of undefined
});
</script>
</html>

也许您应该检查是否还有其他问题?

答案 2 :(得分:0)

    include_once('../conexion.php');
    $equipoida = $_POST['equipoida'];
    $desde = $_POST['desde'];
    $hasta = $_POST['hasta'];        
    $fechas = "SELECT horatrabajo.idequipo, CONCAT(equipo.nombre,' ',equipo.modelo,' ',equipo.marca) AS flota, horatrabajo.horastrab, horatrabajo.fecha FROM horatrabajo INNER JOIN equipo ON horatrabajo.idequipo = equipo.idequipo WHERE horatrabajo.idequipo = $equipoida AND fecha BETWEEN $desde AND $hasta ORDER BY fecha ASC";
    $stmtfechas = $DB_con->query($fechas);
    $filasfechas =$stmtfechas->fetchAll();
    if (empty($filasfechas)) 
        {
            $resultado = "No hay Fechas Disponibles!";
        }
    foreach ($filasfechas as $filaflo)
        {
            print $filaflo['idequipo'].' '.$filaflo['horastrab'].' '.$filaflo['fecha'];
        }