我正在尝试对另一个开发人员编写的错误进行故障排除,并且我不理解属性从选择器开始的方式。
在对话框中有具有唯一设置id的输入字段。
然后当用户提交时,函数就像这样附加在一起,
$('#dialogform').dialog({
autoOpen: false,
height: 925,
width: 1025,
modal: true,
buttons: {
Submit: function () {
var JQuerycollection = $('#dialogform').data();
if (JQuerycollection.isClosed.val() == "False") {
JQuerycollection["msg"] = "Submit";
JQuerycollection[$('[id^="ETI"]').prop('id')] = $('[id^="ETI"]').val();然后将其压缩并通过ajax发送到后端:
data: JSON.stringify({ JSONcollection: JQuerycollection, dlgMsg: "Submit" })对于ID,有两个输入元素以"ETI“开头,ETI_1234和ETI_1235。当我在FireFox中使用调试器时,我只能看到第一个被添加为属性(这是bug),"ETI_1234 = 17“
引用JQuery API:https://api.jquery.com/attribute-starts-with-selector/
从API中,我理解了当右侧不使用另一个选择器时,选择器是如何工作的,但是我不理解在我正在排除的代码中如何使用它。
发布于 2018-11-13 15:45:47
如果要向对象添加所有元素,则需要更改:
JQuerycollection[$('[id^="ETI"]').prop('id')] = $('[id^="ETI"]').val();至:
$('[id^="ETI"]').each(function(){
JQuerycollection[this.id] = this.value;
});$('[id^="ETI"]').prop('id')只返回单个值,而prop()只返回单个值。如果选择器的结果堆栈有多个元素,它将只得到第一个结果的值,而不是所有的结果。
发布于 2018-11-13 15:50:39
这里的错误是,$('[id^="ETI"]')是一个可能返回多个项的选择器,但是当与.prop()或.val()等方法一起使用时,只会返回多个项的第一个项的值。
要解决这个问题,您应该迭代可能的多个元素$('[id^="ETI"]'),然后对每个元素进行值分配。
类似于:
$.each($('[id^="ETI"]'), function(i, el) {
JQuerycollection[$(el).attr('id')] = $(el).val();
});https://stackoverflow.com/questions/53284393
复制相似问题