所以,我想克隆我的选择选项表单,当它已经符合标准时(例如在这种情况下用户选择'THEN'运算符),表单将显示一个固定的内容(风险 - 高),隐藏特定链接(添加更多)并显示提交按钮。
令我感到不安的是,我的代码仅在我选择运算符时才适用于第一种形式。我想要的是,我希望它能在每个最后添加的表格上执行。
例如,我需要一个这样的输出:
如果年龄老了且ldl很高且hdl很低而且sistolic很高那么 风险很高
这是我的代码:
@SuppressWarnings("empty-statement")
public static byte[] inputStreamToByte(InputStream is) throws IOException {
if (is == null) {
return null;
}
// Define a size if you have an idea of it.
ByteArrayOutputStream r = new ByteArrayOutputStream(2048);
byte[] read = new byte[512]; // Your buffer size.
for (int i; -1 != (i = is.read(read)); r.write(read, 0, i));
is.close();
return r.toByteArray();
}
function rule(id_counter) {
if (id_counter != 0) {
var abc = $('#var_name' + id_counter).val();
} else {
var abc = $('#var_name').val();
}
$.ajax({
url: 'search_coll.php',
type: 'post',
data: {
selected_item: abc
},
success: function(response) {
if (id_counter != 0) {
$('#var_name' + id_counter).html(response);
} else {
$('#var_name').html(response);
}
},
error: function() {
console.log('Request failed.')
}
});
};
$(document).ready(function() {
var count = 1;
$('#clone').click(function() {
var ab = $('#tobecloned').clone();
ab.find('select').attr('id', function(i, val) {
return val + count;
});
ab.find('.js_variable').attr('onChange', function(i, val) {
return "rule("+ count +")";
});
$('#tab').append(ab);
count++;
});
});
之前谢谢
答案 0 :(得分:0)
这里有一些不妥之处。
所有选项都没有ID,因此尝试更新它们的循环会将它们设置为NaN
。
但是,您在集合上使用.attr('id')
,它只返回第一个ID,而不是全部。
要依次对每个元素进行操作,请使用.each()
,如下所示:
ab.find('select').each(function() {
var el = $(this)
el.attr('id', el.attr('id') + count)
});
为了在更改选择值时采取措施,您需要为其分配一个带有.change()
的更改处理程序,类似于
$('#operator').change(function() {
operatorSelect($(this))
})
在克隆它们时,您必须为每个选择单独分配更改处理程序,并且您可能希望禁用每个先前的运算符选择,以便不会更改哪个更改。
我发现这是一个有趣的小转移,所以我把一个快速的小提琴演示:https://jsfiddle.net/xosqw00p/