Javascript$.inArray不工作

Javascript$.inArray不工作,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我有一个现有的表,我想阻止相同的数据添加到现有的表中。 我的问题是: 为什么当我点击“创建新用户”按钮时,结果总是提示“未找到” 代码如下: HTML: <div id="users-contain" class="ui-widget"> <h1>Existing Users:</h1> <table id="users" class="ui-widget ui-widget-content"> <thead&

我有一个现有的表,我想阻止相同的数据添加到现有的表中。
我的问题是: 为什么当我点击“创建新用户”按钮时,结果总是提示“未找到”

代码如下: HTML:

<div id="users-contain" class="ui-widget">
    <h1>Existing Users:</h1>
    <table id="users" class="ui-widget ui-widget-content">
        <thead>
            <tr class="ui-widget-header ">
                <th>Name</th>
                <th>Email</th>
                <th>Password</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>guruh</td>
                <td>guruhkharisma1@yahoo.com</td>
                <td>123456</td>
            </tr>
            <tr>
                <td>edo</td>
                <td>edo@yahoo.com</td>
                <td>123456</td>
            </tr>
        </tbody>
    </table>
</div>
<button id="create-user">Create new user</button>

现有用户:
名称
电子邮件
密码
古鲁
guruhkharisma1@yahoo.com
123456
江户
edo@yahoo.com
123456
创建新用户
jQuery

    $(function() {
        var name = $( "#name" ),
            email = $( "#email" ),
            password = $( "#password" ),
            allFields = $( [] ).add( name ).add( email ).add( password ),
            tips = $( ".validateTips" );

        function checkExisting2(o) {
            var arr = [];
            $('#users-contain tr').each(function() {

                if (!this.rowIndex) return;
                var  Id = $(this).find("td").eq(0).html();    

                arr.push(Id);
           });

            if ( $.inArray(o,arr) > -1) {
                return false;
            } else {
                return true;
            }
        }

        $( "#dialog-form" ).dialog({
            autoOpen: false,
            height: 300,
            width: 350,
            modal: true,
            buttons: {
                "Create an account": function() { 
                    var bValid = true;

                    bValid = bValid && checkExisting2(name);

                    if ( bValid ) {
                        alert("not found");
                        $( "#users tbody" ).append( "<tr>" +
                            "<td>" + name.val() + "</td>" + 
                            "<td>" + email.val() + "</td>" + 
                            "<td>" + password.val() + "</td>" +
                        "</tr>" ); 
                        $( this ).dialog( "close" );
                    } else {
                        alert("found");
                    }
                },
                Cancel: function() {
                    $( this ).dialog( "close" );
                }
            },
            close: function() {
                allFields.val( "" ).removeClass( "ui-state-error" );
            }
        });

        $( "#create-user" )
            .button()
            .click(function() {
                $( "#dialog-form" ).dialog( "open" );
            });
    });
$(函数(){
变量名称=$(“#名称”),
电子邮件=$(“#电子邮件”),
密码=$(“#密码”),
所有字段=$([])。添加(名称)。添加(电子邮件)。添加(密码),
提示=$(“.validateips”);
功能检查存在2(o){
var-arr=[];
$('#用户包含tr')。每个(函数(){
如果(!this.rowIndex)返回;
var Id=$(this.find(“td”).eq(0.html();
arr.push(Id);
});
如果($.inArray(o,arr)>-1){
返回false;
}否则{
返回true;
}
}
$(“#对话框窗体”).dialog({
自动打开:错误,
身高:300,
宽度:350,
莫代尔:是的,
按钮:{
“创建帐户”:函数(){
var bValid=真;
bValid=bValid&&checkExisting2(名称);
if(bValid){
警报(“未找到”);
$(“#users tbody”).append(”+
“”+name.val()+“”+
“”+email.val()+“”+
“”+密码。val()+“”+
"" ); 
$(此).dialog(“关闭”);
}否则{
警惕(“发现”);
}
},
取消:函数(){
$(此).dialog(“关闭”);
}
},
关闭:函数(){
allFields.val(“”.removeClass(“ui状态错误”);
}
});
$(“#创建用户”)
.按钮()
。单击(函数(){
$(“#对话框窗体”)。对话框(“打开”);
});
});

写这行时:

bValid = bValid && checkExisting2(name);
代码中没有任何东西表明
name
指向任何有用的东西,因为

var name = $("#name")
指向一个空对象

另外,当你写这篇文章时:

if (!this.rowIndex) return;
它会起作用,但被认为是不好的形式;请尝试以下方法:

if (!this.rowIndex) { 
   return; 
}
这样,当其他人阅读代码时,就不会对代码产生混淆。此外,所有这些都是多余的:

var bValid = true;
bValid = bValid && checkExisting2(name);
if ( bValid ) { .... }
相当于:

if (checkExisting2(name)) { ... }
var bValid = checkExisting2(name);

为什么要构建整个数组,然后再次迭代以检查它是否包含id

用这样的方法:

    function checkExisting2(o) {
        var rows = $('#users-contain tr'),
            row = null;
        for (var i=1; i<rows.length; i++) {
            if (rows[i].find('td')[0].html() == o)
                return true;
        }
        return false;
    }
在您调用
$.inArray
之前,在它自己的线路上。然后运行脚本:当执行到达那里时,您将进入调试模式,您可以确定
arr
o
中有什么内容

旁注 完全等同于:

if (checkExisting2(name)) { ... }
var bValid = checkExisting2(name);

(当然,除非在两行之间剪下一些代码)

$(“#name”)为空:您发布的HTML中没有id“name”。@frenchie
$(“#name”)
将返回一个空的jquery对象,而不是null。@Amareswar:true,一个空对象。不管怎样,我认为这是这段代码的问题之一。我认为JSFIDLE在这里会有所帮助。这行代码是邪恶的!!!!!!如果(!this.rowIndex)返回;用牙套,伙计!说得好,尽管我认为他把代码删减了一点(例如,整个表单部分丢失了)@redShadow:可能是这样。非常感谢,我忘了写代码$(“#name”).val();它解决了这个问题。