Проблема с селектором jQuery по идентификатору, включая другие идентификаторы - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть две таблицы на моей странице: #add и #items. #add имеет один ряд входов. #items имеет несколько строк. Я сохраняю данные в базе данных. #add должен сохранять только при нажатии кнопки, а #items - при размытии.

Проблема в том, что входы #add также пытаются сэкономить на размытии. Селектор, который я использую ниже, работает с входами таблицы #add, а также с входом таблицы #items.

Вот пример кода (при необходимости я могу ссылаться на исходный файл):

$("#items tbody tr td input:not('[name=\"ext\"]')").live('focus',function() {
    $(this).attr("readonly",false);
    $(this).select();
    curEdit = $(this).val();
    var name = $(this).attr('name');
    if (name == 'item') {
        $(this).alphanumeric();
    } else if (name == 'tag') {
        $(this).alphanumeric({allow:" "});
    } else if (name == 'desc') {
        $(this).alphanumeric({allow:".,-()/ "});
    } else if (name == 'qty') {
        $(this).numeric();
    } else if (name == 'cost' || name == 'list' || name == 'disc' || name == 'unit' || name == 'ext') {
        $(this).numeric({allow:"."});
    }
}).live('blur',function() {
    $(this).attr("readonly",true);
    if (curEdit != $(this).val()) { // only update on changes
        var col = $(this).parent().prevAll().length;
        var query = "action=edit&id="+$(this).parents('tr').attr('rel');
        if (col == 1 || col == 10) { $(this).val($(this).val().toUpperCase()); } // format ITEM and GSA
        if (col > 4 && col < 10) { $(this).val(formatCurrency($(this).val())); } // format COST, LIST, DISC, UNIT, and EXTENDED
        if (col == 3) { $(this).val(ucEach($(this).val())); }
        if (col > 3 && col < 10 && col != 5) {
            var qty = $(this).parents('tr').find("[name='qty']").val();
            var list = $(this).parents('tr').find("[name='list']").val();
            var disc = $(this).parents('tr').find("[name='disc']").val();
            if ($(this).attr('name') != "unit") {
                var unit = formatCurrency(list * (1-(disc/100)));
                $(this).parents('tr').find("[name='unit']").val(unit);
            } else {
                disc = formatCurrency(((list - $(this).val())/list)*100);
                $(this).parents('tr').find("[name='disc']").val(disc);
            }
            unit = $(this).parents('tr').find("[name='unit']").val();
            var ext = formatCurrency(qty * unit);
            $(this).parents('tr').find("[name='ext']").val(ext);
            query = query + "&field[]=qty&val[]="+qty+"&field[]=list&val[]="+list+"&field[]=unit&val[]="+unit+"&field[]=disc&val[]="+disc+"&field[]=ext&val[]="+ext;
        } else {
            query = query + "&field="+$(this).attr('name')+"&val="+$(this).val();
        }

        $.post("itemsdb.php", query, function(data) {
            if (data.res == "fail") {
                alert("There was a problem saving this item."+data.error);
            }
        },"json");
    }
});

1 Ответ

1 голос
/ 01 декабря 2010

Похоже, ваш селектор может подбирать неправильные элементы.Попробуйте запустить селектор в консоли Javascript вашего браузера:

$("#items tbody tr td input:not('[name=\"ext\"]')")

Затем проверьте возвращаемые объекты и убедитесь, что они соответствуют тому, что вы пытаетесь сопоставить.

...