获取jQuery更改内容的文本字段的“更改”事件

时间:2011-12-20 15:17:29

标签: live onchange jquery

我使用一些非常简单的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精灵从“勾号”调整为空框。同时,它还将文本字段的内容(由CSS类“隐藏”隐藏)更改为1或0,以指示是否选中该框。

它必须有1或0,因为当数据传递到下一个阶段时我必须有一个值,未选中的复选框不会发送任何值。

一切正常!

但是......我还需要能够检测隐藏文本字段的“更改”事件。

这是由“savedData”类控制的。

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

我当然可以在上面的代码中的“click”事件中包含它,但这对应用程序来说不实用。

似乎“更改”甚至只是由键盘或鼠标更改的元素触发,jQuery更改的任何内容都没有被标记。

最初我使用隐藏的输入类型并认为这是问题,但现在已将它们全部更改为文本类型,问题仍然存在!

任何提示?!

1 个答案:

答案 0 :(得分:3)

  

似乎“更改”甚至只是由键盘或鼠标更改的元素触发,jQuery更改的任何内容都没有被标记。

是的,这是正确的。这正是它的工作原理。只有用户触发事件处理程序所做的更改:程序更改不会。触发它们的唯一方法是自己这样做:

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

.change()触发元素上的change事件,因此将调用处理程序。