Я не могу получить «return false», чтобы .live() не повторял распространение кода.

StackOverflow https://stackoverflow.com/questions/2244502

  •  19-09-2019
  •  | 
  •  

Вопрос

Я хочу, чтобы это было настроено так, чтобы при нажатии определенного фрагмента текста появлялось поле ввода текста, и пользователь мог вводить данные в поле, а затем либо нажимать кнопку «Сохранить», либо «Отменить» и либо отправлять его в базу данных или сбросить значение соответственно.Однако, несмотря на использование return false, я не могу предотвратить повторную активацию этого кода.

Я использовал die(), и это работает, но я также хочу иметь возможность повторно создать исходное событие щелчка после того, как пользователь либо сохранит, либо отменит, и не могу придумать, как заставить это работать.Заранее спасибо за помощь.

$('td[name]').live("click", function() {
    nameof = $(this).attr("name");
    idof = $(this).attr("id");
    valueof = $(this).html();

    $(this).html('<input type="text" name="' + nameof + '" value="' + valueof + '"><input type="hidden" name="id" value="' + idof + '"><span id="save">save</span> &nbsp <span id="cancel">cancel</span>');

    return false;   
});

Обновлять:

Вот что я наконец придумал (включая весь код редактирования на месте):

$('td[name="grouping"] span, td[name="title"] span').live('click', function() {         
    nameof = $(this).parent().attr("name");
    idof = $(this).parent().attr("id");
    valueof = $(this).html();

    if($("table td>span").children('input').length > 0) {} 
    else {
        if($(this).children().length > 0) {} 
        else {
            $(this).html('<input type="text" name="' + nameof + '" value="' + valueof + '"><input type="hidden" name="id" value="' + idof + '"><input type="hidden" name="originalinput" value="' + valueof + '"><span class="save">save</span> &nbsp; <span class="cancel">cancel</span>');
        }
    }

});

$('.cancel').live('click', function() {         
    $(this).parent().html($(this).siblings('input[name="originalinput"]').attr("value"));
});

$('.save').live('click', function() {

    savevalue = $(this).siblings('input[type="text"]').attr("value");
    saveid = $(this).siblings('input[name="id"]').attr("value");
    savecolumn = $(this).siblings('input[type="text"]').attr("name");

    $.ajax({
       type: "POST",
       url: "../php/adminajax.php",
       data: 'id=' + saveid + '&' + savecolumn + '=' + savevalue
    });

    $(this).parent().html(savevalue);
});

$('#saving').ajaxStart( function() {
    $(this).fadeIn(100);
});

$('#saving').ajaxStop( function() {
    $(this).fadeOut(2000);
});

Я уверен, что это намного сложнее, чем все, что я мог бы загрузить, но, по крайней мере, теперь я знаю основы редактирования AJAX на месте.Всем спасибо за помощь.

Это было полезно?

Решение

Похоже, вы по сути пытаетесь заключить сделку по редактированию на месте.Проблема, с которой вы столкнулись, заключается в том, что щелчок пользователя распространяется через текстовое поле/промежутки обратно в родительский контейнер, тем самым снова вызывая событие щелчка.Вам нужно отфильтровать его, чтобы он не выбирал td, в содержимом которого есть входные данные.Что-то в этом роде:

$('td[name]:not(td>input)').live(...);

Хотя это и не прямой ответ на то, что вы ищете, почему бы не использовать существующий плагин, подобный одному нашел здесь?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top