我使用一些非常简单的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更改的任何内容都没有被标记。
最初我使用隐藏的输入类型并认为这是问题,但现在已将它们全部更改为文本类型,问题仍然存在!
任何提示?!
答案 0 :(得分:3)
似乎“更改”甚至只是由键盘或鼠标更改的元素触发,jQuery更改的任何内容都没有被标记。
是的,这是正确的。这正是它的工作原理。只有用户触发事件处理程序所做的更改:程序更改不会。触发它们的唯一方法是自己这样做:
$(this).next().val(newValue).change();
.change()
触发元素上的change
事件,因此将调用处理程序。