如果indexOf返回0,为什么此代码仍然向表中添加行?

时间:2014-11-14 05:05:11

标签: javascript jquery algorithm

我有这个jQuery,它允许在按钮的click事件上向表中添加新行,但前提是id值尚未添加。

var factAgregada = [];

$('#btnAgregarFactura').on("click", function (e) {
    e.preventDefault();

    // no_factura and fecha_factura comes from a modal window 
    // it's not relevant to show that part here

    var no_factura = $("#no_factura").val(), 
        fecha_factura = $("#fecha_factura").val(),
        html;

    console.log(no_factura);
    console.log(factAgregada.indexOf(no_factura));

    if (factAgregada.indexOf(no_factura) >= -1) {
        html = '<tr>';
        html += '<td><input type="checkbox" id="' + no_factura + '"></td>';
        html += '<td>' + no_factura + '</td>';
        html += '<td>' + fecha_factura + '</td>';
        html += '</tr>';

        $(html).appendTo("#facturaBody");
    }

    factAgregada.push(no_factura);
});

首次执行时,代码正常,console.log()输出:

 12
 -1

所以这是正确的添加行,但在第二次执行时保持相同的值console.log()从previos值更改为这些:

12
0

所以,不应该添加行但仍然添加到表中并继续执行appendTo(),那里有什么问题?我没看到什么?

2 个答案:

答案 0 :(得分:2)

var factAgregada = [];

$('#btnAgregarFactura').on("click", function (e) {
    e.preventDefault();

    var no_factura = 10, 
        fecha_factura = 2,
        html;

    console.log(no_factura);
    console.log(factAgregada.indexOf(no_factura));

    if (factAgregada.indexOf(no_factura) == -1) {
        html = '<tr>';
        html += '<td><input type="checkbox" id="' + no_factura + '"></td>';
        html += '<td>' + no_factura + '</td>';
        html += '<td>' + fecha_factura + '</td>';
        html += '</tr>';

       console.log(html);
    }

    factAgregada.push(no_factura);
});

更改条件检查

view this fiddle

答案 1 :(得分:1)

更优雅的写作方式可能是if (!$("#" + no_factura)[0] )

检查是否存在具有id的此类元素,然后才添加...