我有一个函数addText()
,它有3个变量(textInput, type, rowID
)。我声明它们没有var
关键字(这样它们可以在函数外部使用?)。我有很多复选框,我用这种方式创建:
<td><input type="checkbox" name="CB" id="monitor_'+rowID+'"/></td>
然后我有这个功能,需要使用这3个变量:
function monitoring(rowID, number, type) {
var $check = $('#status_table #monitor_' + rowID);
$('#test').append($check);
if($check.is(':checked')) {
$.post('/request', {
inputText: number,
key_pressed: type
}).done(function (reply) {
if(reply == "on") {
$('#test').append("on");
} else {
$('#test').append("off");
}
});
}
return;
}
此功能将在此处调用:
$('#status_table #monitor_'+rowID).each(function(rowID, textInput, type){
monitoring(rowID, textInput, type);
});
注意:inputText
是发布到某处的变量。
问题:
这是用变量调用选择器的正确方法吗?
$('#status_table #monitor_'+rowID)
我应该在第二组代码中传递两次变量(在选择器功能和监视功能中都有)?
如何正确传递变量?
选择器是否正确?或者我应该将$('#status_table #monitor_'+rowID).each(function(){})
更改为$('#status_table tr').each(function(){})
?
5。增加:我应该在何处以及如何调用“监控”功能?我把它放在addText下(参见下面的代码),但没有任何意义,因为只有在单击“添加”按钮时才会执行该功能。此外,由于我的选择器是一个变量,我想确保它实际上可以对所有选中的复选框执行相同的操作。我该怎么做?
我尝试了但是当我选中复选框时,我的代码根本没有响应。
这是我的addText()
函数(我已在此函数中包含函数监视,而不是如上所述的另一个jQuery操作):
function addText(add_type, fb_type) {
$("#" + add_type + "Add").click(function () {
$('.TextInput').empty();
textInput = $("#" + fb_type + "TextInput").val();
if(textInput.length === 0) {
alert('please enter the fieldname');
return;
}
index = $('#status_table tbody tr').last().index() + 1;
type = $("#select-choice-1").find(":selected").text();
rowID = type + textInput;
var str = '<tr id="' + rowID + '">' + '<td>' + index + '</td><td>' + rowID +
'</td><td class="type_row_' + textInput + '">' + type + '</td><td class="feedback number">' +
textInput + '</td>' + '<td><img src="static/OffLamp-icon.png" class="image" id="off"></td>' +
'<td><input type="checkbox" name="CB" id="monitor_' + rowID +
'" class="custom" data-mini="true" /><label for="CB"> </label></td><td class="outputRemove">x</td>' +
'</tr>';
if(alreadyExist(textInput, type)) {
alert('Entry exists. Please enter another number.')
} else {
$('#status_table tr:last').after(str);
}
monitoring(rowID, textInput, type);
return;
});
}
表格的HTML:
<table class="config" id="status_table">
<thead>
<tr>
<th colspan="4" ; style="padding-bottom: 20px; color:#6666FF; text-align:left; font-size: 1.5em">Output Status</th>
</tr>
<tr>
<th>Index</th>
<th>Row ID</th>
<th>Feedback Type</th>
<th>Feedback Number</th>
<th>Status</th>
<th>Monitor?</th>
<th>Remove?</th>
</tr>
</thead>
<tbody>
<tr></tr>
</tbody>
</table>
答案 0 :(得分:1)
有一些问题。首先,这不起作用:
$('#status_table #monitor_'+rowID).each(function(rowID, textInput, type){
monitoring(rowID, textInput, type);
});
传递给.each()
的函数有两个参数:indexInArray
和valueOfElement
,但您可以随意调用它们 - 在这种情况下,rowID
将是索引而textInput
将是元素的价值; type
将被定义,因为没有传递给它的值。
其次,在调用ID选择器后使用.each()
是没有意义的。 ID选择器最多只能选择一个元素,因为ID必须是唯一的。
当您致电rowID
时,如果textInput
,type
和.each()
在范围内,那么您可以直接致电monitoring
而无需.each()
一点都没有。所以只是:
monitoring(rowID, textInput, type);
答案 1 :(得分:1)
这是用变量调用选择器的正确方法吗?
选择器只是字符串。您可以使用变量组装选择器,就像使用变量组装字符串一样。
我应该在第二组代码中传递两次变量(在选择器功能和监视功能中都有)?
取决于变量所在的范围。如果变量与函数在同一范围内,则函数可以访问它。如果函数声明在变量所在的位置之外,那么您应该将它传递给它们。
如何正确传递变量?
作为调用期间的参数,如someFunction(theFoo,theBar,theOtherBar)
选择器是否正确?或者我应该将$('#status_table #monitor _'+ rowID).each(function(){})更改为$('#status_table tr')。each(function(){})?
ID应该在页面中是唯一的,并且只存在一次。因此,作为选择器的id应该足够,如$('#monitor_[someID]')
。但这只意味着每次rowID
一次一个。如果您使用$('#status_table tr').each(function(){})
代替,则更好,并循环遍历tr
。
答案 2 :(得分:1)
这是用变量调用选择器的正确方法吗? $('#status_table #monitor_'+rowID)
是。传递给jQuery的选择器只是一个字符串,因此将一个变量添加到字符串中就是这样做的方法。我会注意到元素ID是meant to be unique(请查看该链接页面上列表中的第2项)
我是否应该在第二组代码中传递变量两次(在选择器功能和监视功能中)?
如果您的函数具有.each
函数返回的参数,则您不需要像$('#status_table #monitor_'+rowID).each(monitoring);
那样。
但我会注意到,.each
回调中的参数是indexInArray
和valueOfElement
指定here且没有rowID
,{{传回的参数为1}}或number
。
如何正确传递变量?
不知道你的意思。如果您指的是将变量传递给函数,那么您一直在正确地执行它。例如。 type
选择器是否正确?或者我应该将myAwesomeFunction(myFirstVariable, mySecondVariable)
更改为$('#status_table #monitor_'+rowID).each(function(){})
那真的取决于你想要实现的目标。第一个获取具有ID $('#status_table tr').each(function(){})
评估的ID的元素,这些ID位于ID为'monitor_'+rowID
的元素内。第二个抓取标识为status_table
的元素内的所有tr
。这取决于你想要做什么。