[英]problems with jquery Tree Traversal
(1)我有一种情况,其中有些复选框带有“其他”(用户键入的选项)复选框
(2)单击“其他”复选框时,将出现一个输入字段并覆盖“其他”文本。
(3)用户可以在此处键入内容,并且该复选框旁边有一个“确定”按钮。
(4)当用户单击“确定”按钮时,输入字段将消失,并且用户键入的文本将位于先前“其他”文本的位置。 同时,新的“其他”字段应位于之前的字段之后。 同样,以前的“其他”不应再扩展,因为它不再是“其他”(例如,现在是黑色)。
为此,我编写了这样的jQuery:
$('.otherOption input[type="checkbox"]').click(function() {
$(this).closest('.otherOption').find('.box').toggle();
});
$('.ok').click(function() {
var value = $('.optionInput').val();
$('.box').hide();
$('.otherOption p').text(value);
$('.otherOption').removeClass('otherOption');
$(this).closest('.otherOption').append('<div class="block otherOption"><input type="checkbox" /> <p>Other</p><div class="box"><input type="text" value="" placeholder="Provide your option" class="optionInput" /><button class="ok">Ok</button></div></div>');
});
我认为,我可以正确编写一些脚本。 但是,由于我不擅长jQuery,因此无法编写jquery选择器(.closest()、. parents()、. next()等),这就是为什么我的脚本无法正常工作。 因此,请帮助我使脚本正确无误。 提前致谢
好的开始。 有几件事情可以使您以所需的方式工作。
$('.otherOption').removeClass('otherOption');
删除otherOption类的所有实例,这就是为什么您的追加无法正常工作的原因。 .after()
旧的otherOption框中。 据说这些删除了这一行: $('.otherOption').removeClass('otherOption');
并将$(this).closest('.otherOption')...
更改为
$(this)
.closest('.otherOption')
.removeClass('otherOption')
.after('<div class="block otherOption"><input type="checkbox" /> <p>Other</p><div class="box"><input type="text" value="" placeholder="Provide your option" class="optionInput" /><button class="ok">Ok</button></div></div>');
附带说明-您稍后可能会怀疑.click()
函数将不会多次运行。 .click()
绑定到页面加载时的所有匹配对象。 因此,页面加载后动态添加的所有项目均将无法正常工作。 查看使用jQuery的.on()
方法。 这将确保您将代码用于所有匹配项,无论何时将它们添加到DOM。
编辑:另一件事,我注意到当您重复添加项目时,它总是从第一个框b / c中添加文本,而您并没有删除使用的文本框。 我添加了$(this).closest('.box').remove();
JS代码的末尾以解决此问题。
这是jQuery的.on()
实现的http://jsfiddle.net/a695jk2d/4/
不要只是复制并粘贴它,了解它。
只需在现有的“其他”选项上方插入一个新结构,可能会更有意义。 为什么要替换它的文本,并添加一个全新的“其他”选项块? 此版本将在“其他”选项上方插入一个新选项。 这样,您还只需绑定一次元素。
$( '.ok' ).click(function () {
var value = $( '.optionInput' ).val();
$( '.optionInput' ).val('');
$( this ).parent().parent().find( '.box, p' ).toggle();
$( '.otherOption input[type="checkbox"]' ).attr( 'checked', false );
$( '#optionContainer' ).append(
'<div class="block"><input type="checkbox" /> <p>' + value + '</p></div>'
);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.