【问题标题】:Get TypeError: $(...)[0] is undefined获取类型错误:$(...)[0] 未定义
【发布时间】:2019-05-08 11:04:21
【问题描述】:

单击按钮时,我的代码会调用 ajax 脚本。 ajax 脚本此时只是返回 0 或 1,如下所示:

    $result = 1;
    echo json_encode($result);

问题出在这一行:

    $('.adt-checkbox_0')[0].prop("checked", result);

它给出了错误

TypeError: $(...)[0] 未定义;无法访问其“prop”属性

代码似乎可以工作,但它看起来像运行了两次,因为我偶尔会遇到故障(php 代码中的错误消息)。如果我删除 [0],正如我在一些帖子中看到的那样,错误就会消失,但脚本不起作用。我在jsfiddle 中添加了下面的代码,但我猜它不起作用,因为 php 函数。有人可以解释该声明有什么问题吗?我应该有一条线检查它是否存在吗?如果是这样,我该怎么做?

    <form>
    <tr> 
    <input type="hidden" name="pid-adt-checkbox_0" value="14" id="pid-adt-checkbox_0" /> 
    <td class="adt" id="adt-checkbox_0"><input type="checkbox" name="adt_check_0" /></td>
    </tr>
    <tr> 
    <input type="hidden" name="pid-adt-checkbox_1" value="15" id="pid-adt-checkbox_0" /> 
    <td class="adt" id="adt-checkbox_1"><input type="checkbox" name="adt_check_1" /></td>
    </tr>
    </form>


    <script>
    $(".adt").click(function(){

        var next_id = $(this).closest('td').attr('id') ;
        var pid_id = 'pid-'+next_id;
        var pid = $("#"+pid_id).val();  

        var dataArray = {};
        dataArray[0] = 'change_status';
        dataArray[1] = 'oID';
        dataArray[2] = pid;  

        $.ajax({
           type:  'POST',
           data:  dataArray ,
           async: false,
           url:"adt_ajax.php",
           dataType: 'json',
           success:function(result) {
             $('.adt-checkbox_0')[0].prop("checked", result);
           }
        });
        return false;      

    }); 
    </script> 

【问题讨论】:

  • 即使你找到了元素,你所做的也没有意义。 prop() 是一个 jQuery 方法,而不是原生 Element 方法。所以用[0] 将元素从 jQuery 对象中分离出来是没有意义的。
  • 您无法检查隐藏字段 - 您的 HTML 也是无效的
  • 你不应该需要 [0] - 大多数 jQuery 函数都可以像你希望的那样在多选中工作
  • 你是说$("[name=adt_check_0]").prop("checked",result=="true")
  • $('.adt-checkbox_0') 不存在。你的意思是#closetypo

标签: jquery undefined typeerror


【解决方案1】:

问题:

  • adt-checkbox_0 不是class 而是id,修复将其更改为#adt-checkbox_0

  • adt-checkbox_0 不是input[type=checkbox] 而是td 修复:#adt-checkbox_0 input

  • 使用索引 [0] 将返回原生 JS 对象而不是 jQuery,修复:使用 .eq(0)

如果要使用[0]的解决方案

$('#adt-checkbox_0 input')[0].checked = result

使用 jQuery

$('#adt-checkbox_0 input').eq(0).prop("checked", result);

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多