根据相关 select 更改多个输入的占位符
Changing the placeholder for multiple inputs based on relevant select
我对编程还很陌生,还不是很擅长...我一直在搜索并试图让它工作,但没有成功。无论如何,用户应该能够添加数字 (http://codepen.io/anon/pen/dPaEoo),并且如果更改其中一个输入后面的 select 选项,它应该更改该输入字段的占位符。 enter code here
当我尝试它时(我尝试使用 find、closest、prev 和许多其他东西),它没有用,它改变了所有输入,或者只是第一个...
如有任何帮助,我们将不胜感激!
只需将其添加到您的 js 文件中
$('.optiesel').on('change',function() {
$(this).prev('input').attr('placeholder',$(this).find(":selected").text());
});
编辑: 这不适用于动态添加的元素(通常它应该在应用 .on
时起作用)但下面的代码将替代它。
$(document).on('change', '.optiesel', function() {
$(this).prev('input').attr('placeholder',$(this).find(":selected").text());
});
您可能会被两件事绊倒:确保您触发的是 'change' 事件,而不是选择的 'click' 事件。并且,确保将事件处理程序绑定到新的 .child 节点。像这样:
$("#addBtn").click(function () {
var newChild = $(".child:last").clone();
newChild.appendTo("#wrapDiv");
bindSelectActions();
});
$("#removeBtn").click(function () {
if ($('.child').length > 1) {
$("#wrapDiv").children(".child:last").remove();
}
});
var bindSelectActions = function () {
$('.optiesel').change(function () {
$(this).closest('.child').find('.input').attr('placeholder', $(this).val());
});
}
如果它是最后一个元素,我会避免删除函数
您正在动态添加新输入和 select。如果您向 select 添加一个侦听器,它将只对那些在加载文档之前添加的侦听器起作用。您需要向父 div 添加一个侦听器,然后通过单击 select 来触发它。像这样:
$('#wrapDiv').on('change', 'select.optiesel', function(){
$(this).siblings('input.input').attr('placeholder', $(this).val());
});
此外,当您向 wrapDiv 添加一个新子项时,您只是在克隆最后一个子项,并且您正在应对所做的所有更改。将此代码的第三行添加到现有的添加函数中,以将输入更改为原来的样子:
$("#addBtn").click(function () {
var newChild = $(".child:last").clone();
newChild.children('input').attr('placeholder', 'Thuisnummer (9 cijfers)').val('');
newChild.appendTo("#wrapDiv");
});
如果只剩下一个子项,也不要让用户删除一个子项。那时将没有任何东西可以克隆。您可以使用它来检查条件:
if($("div#wrapDiv div.child").length > 1)
我对编程还很陌生,还不是很擅长...我一直在搜索并试图让它工作,但没有成功。无论如何,用户应该能够添加数字 (http://codepen.io/anon/pen/dPaEoo),并且如果更改其中一个输入后面的 select 选项,它应该更改该输入字段的占位符。 enter code here
当我尝试它时(我尝试使用 find、closest、prev 和许多其他东西),它没有用,它改变了所有输入,或者只是第一个...
如有任何帮助,我们将不胜感激!
只需将其添加到您的 js 文件中
$('.optiesel').on('change',function() {
$(this).prev('input').attr('placeholder',$(this).find(":selected").text());
});
编辑: 这不适用于动态添加的元素(通常它应该在应用 .on
时起作用)但下面的代码将替代它。
$(document).on('change', '.optiesel', function() {
$(this).prev('input').attr('placeholder',$(this).find(":selected").text());
});
您可能会被两件事绊倒:确保您触发的是 'change' 事件,而不是选择的 'click' 事件。并且,确保将事件处理程序绑定到新的 .child 节点。像这样:
$("#addBtn").click(function () {
var newChild = $(".child:last").clone();
newChild.appendTo("#wrapDiv");
bindSelectActions();
});
$("#removeBtn").click(function () {
if ($('.child').length > 1) {
$("#wrapDiv").children(".child:last").remove();
}
});
var bindSelectActions = function () {
$('.optiesel').change(function () {
$(this).closest('.child').find('.input').attr('placeholder', $(this).val());
});
}
如果它是最后一个元素,我会避免删除函数
您正在动态添加新输入和 select。如果您向 select 添加一个侦听器,它将只对那些在加载文档之前添加的侦听器起作用。您需要向父 div 添加一个侦听器,然后通过单击 select 来触发它。像这样:
$('#wrapDiv').on('change', 'select.optiesel', function(){
$(this).siblings('input.input').attr('placeholder', $(this).val());
});
此外,当您向 wrapDiv 添加一个新子项时,您只是在克隆最后一个子项,并且您正在应对所做的所有更改。将此代码的第三行添加到现有的添加函数中,以将输入更改为原来的样子:
$("#addBtn").click(function () {
var newChild = $(".child:last").clone();
newChild.children('input').attr('placeholder', 'Thuisnummer (9 cijfers)').val('');
newChild.appendTo("#wrapDiv");
});
如果只剩下一个子项,也不要让用户删除一个子项。那时将没有任何东西可以克隆。您可以使用它来检查条件:
if($("div#wrapDiv div.child").length > 1)