Получение события «Изменить» для текстового поля, содержимое которого изменяется с помощью jQuery - PullRequest
2 голосов
/ 20 декабря 2011

Я сделал несколько симпатичных флажков, используя несколько довольно простых jQuery

HTML

<span class="iconElement checkBox" id="update_Check"></span>
<input type="text" id="update" name="update" value="0" class="hidden savedData" />

JS

$('.checkBox').live('click', function (e) { 
    if ($(this).hasClass('disabled') != true) {
        $(this).toggleClass('checked')
        var thisValue = parseInt($(this).next().val());
        var newValue = (thisValue - 1) * (-1); // enusures the output is either 1 or 0, [ (1-1)*-1=0 and (0-1)*-1 =1 ]
        $(this).next().val(newValue);
    };
}); 

Это просто диапазон с хорошим CSSфоновый спрайт, который при нажатии изменяет переключение своего «проверенного» класса, настраивая спрайт CSS из «Tick» в пустое поле.В то же время он также изменяет содержимое текстового поля (скрытого классом CSS «hidden») на 1 или 0, чтобы указать, установлен ли флажок.

Он должен иметь это 1 или 0так как когда данные передаются на следующий этап, я должен иметь значение, не отмеченный флажок не отправляет значение.

Это все работает отлично!

НО ... Мне также нужно бытьвозможность обнаружить «изменение» события скрытого текстового поля.

Это должно контролироваться классом "saveData".

$('.savedData').live('change', function () {
    // do stuff now we know this has been changed
});

Конечно, я мог бы включить это в событие "click" в приведенном выше коде, но это непрактично дляapplication.

Кажется, что "изменение" даже инициируется только элементами, которые изменяются клавиатурой или мышью, все, что изменилось с помощью jQuery, не помечается.

Изначально я использовал скрытыйТип ввода и думал, что это была проблема, но изменили их все на текстовый тип, и проблема все еще там!

Любые советы?!

1 Ответ

3 голосов
/ 20 декабря 2011

Кажется, что "изменение" даже инициируется только элементами, которые изменены клавиатурой или мышью, все, что изменилось с помощью jQuery, не помечается.

Да, то естьправильный.Именно так это и работает.Только изменения, сделанные пользователем, запускают обработчики событий: программные изменения - нет.Единственный способ вызвать их - это сделать это самостоятельно:

$(this).next().val(newValue).change();

.change() вызывает событие change для элемента, поэтому будет вызван обработчик.

...