为什么我的 .val() 返回 undefined,即使 id 是正确的并且脚本在正确的位置?

Why does my .val() return undefined even though id is correct and the script is in the right place?

提问人:Black Shark 提问时间:3/19/2022 最后编辑:Black Shark 更新时间:3/19/2022 访问量:71

问:

我正在尝试从生成的 HTML 中解析一些数据,这些数据显示数据库中的对象到 jquery。

以下是块内信息的生成方式:

<?php foreach ($items as $item): ?>
<div class="item-info-div" style="padding: 5px;">
            //different fields output
            <a><?= $item->dailyRate ?> per day</a><br>
//then I generate a unique id using field name + id
            <input type='hidden' name='dailyRate' id='dailyRate<?=$item->id?>'
             value='<?=$item->dailyRate?>'>
//then I have a button that should parse the data to jquery
            <input type='submit' name='add_to_list' class='btn btn-warning my-2 add' 
            value='Add To list' id='<?=$item->id?>'>
</div>

然后,在我生成块的文件中,我将脚本放在结束正文标记的正文之前

<script type="text/javascript">
$(document).ready(function(){
$(document).on("click",".add",function(){
    var id = $(this).attr("id");
    var dailyRate = $("#dailyRate"+id+"").val();

    console.log('I am the current value: ' + dailyRate);  
});
 }); 
</script>

问题是当我在浏览器中查看 HTML 源代码时,该字段的 value 和 id 都已正确生成。如果我在jquery(“#dailyRate”+id+“”)中执行相同的串联,它确实会产生与HTML源代码中的字符串相同的字符串。 var Id 被提醒就好了。为什么这个 .val 语句在 alerted/console.logged 时返回 undefined?我应该怎么做才能让它存储隐藏输入的值? 我尝试更改数据库中 dailyRate 的数据类型(假设它是 bigint),它仍然显示未定义。

UPD:我的错,问题出在数据上。在我的项目中,我们没有使用序列号,而是使用带有空格的生成 ID。由于它们,jquery无法正确指向地址(id)。多亏了 https://stackoverflow.com/users/4680889/hasan-%c4%b0slamo%c4%9elu 问题才得以解决。 我真正需要的解决方案:id='dailyRate<?=str_replace(' ','',$vehicle->regNum)?>'

php jquery 解析

评论

0赞 VLAZ 3/19/2022
请将呈现的 HTML 和 JS 代码作为最小的可重现示例发布。如果没有真正的代码,我们就无法猜测出了什么问题。如果我只是用 valies 代替它,它会起作用,但这不一定代表您的真实代码。
0赞 Black Shark 3/19/2022
我发现问题不在于代码本身,而在于数据。在我的项目中,我不使用序列号作为主键,它看起来像 LG01 VXT,并且那里总是有空格。我想这就是为什么jquery没有看到id的地址。你知道我是否应该再问一个问题,即如何在jquery中格式化数据并以某种方式删除这个问题吗?

答:

-2赞 Hasan İSLAMOĞLU 3/19/2022 #1

我写了你的代码,它工作得很好。您应该检查您的对象或 jquery 调用。您可以在下面找到工作示例。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

<?php
$item = new StdClass();
$item->id = 1;
$item->dailyRate = 5;
$items = array($item);

?>
<?php foreach ($items as $item): ?>

<div class="item-info-div" style="padding: 5px;">
            //different fields output
            <a><?= $item->dailyRate ?> per day</a><br>
//then I generate a unique id using field name + id
            <input type='hidden' name='dailyRate' id='dailyRate<?=$item->id?>'
             value='<?=$item->dailyRate?>'>
//then I have a button that should parse the data to jquery
            <input type='submit' name='add_to_list' class='btn btn-warning my-2 add' 
            value='Add To list' id='<?=$item->id?>'>
</div>
<?php endforeach ?>

<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script type="text/javascript">
$(document).ready(function(){
$(document).on("click",".add",function(){
    var id = $(this).attr("id");
    var dailyRate = $("#dailyRate"+id+"").val();

    console.log('I am the current value: ' + dailyRate);  
});
 }); 
</script>

</body>
</html>

评论

0赞 Black Shark 3/19/2022
对不起,日志说有语法错误,我看不到代码是否有效。我已经重新创建了 HTML 文件,它说了相同的错误: { “message”: “Uncaught Error: Syntax error, unrecognized expression: #dailyRate<?=$item->id?>”, “filename”: “code.jquery.com/jquery-3.6.0.min.js”, “lineno”: 2, “colno”: 13633 }
0赞 Hasan İSLAMOĞLU 3/19/2022
您应该另存为 .php 文件。例如,“index.php”。只需复制我与您共享的代码并创建“index.php”文件并通过 php -S localhost:8080 提供服务,然后访问 localhost:8080 页面并单击按钮。您不能在 .html 文件中运行 PHP 代码。
0赞 Black Shark 3/19/2022
所以,我实际上认为这与正在输入的值有关。如果你尝试运行它,它会说undefined。我想这是因为输入 id 中的空格,您知道如何在解析数据时避免它吗?<input type='hidden' name='dailyRate' id='dailyRateLG01 VXT' value='235'> <input type='submit' name='add_to_list' class='btn btn-warning my-2 add' value='添加到列表' id='LG01 VXT'>
0赞 Hasan İSLAMOĞLU 3/19/2022
答案是肯定的。如果只有空间问题,请使用以下代码:id='dailyRate<?=str_replace(' ','',$item->id)?>' 和按钮 id='<?=str_replace(' ','',$item->id)?>'
0赞 ca1c 3/20/2022
@HasanİSLAMOĞLU 编辑答案 当您有问题的答案时,此答案是不够的。