我是JQuery的新手,所以如果这是一个明显的问题,我很抱歉。我有一个简单的表单,其中包含一些输入字段。在更改事件上,我想更改预定义的数组。触发更改事件,但在此更改事件中,我想再次遍历所有input-element以填充/更改数组。然而,迭代不起作用。
<script>
jsonObj = [];
$(document).ready(function(){
$("input[class=domain]").change(function(){
refreshData();
});
$("input[class=domain]").each(function() {
var domain = $(this).attr("name");
var score = $(this).val();
item = {}
item ["domain"] = domain;
item ["score"] = score;
jsonObj.push(item);
});
});
function refreshData() {
alert("Text Changed"); <<-- This line is reached.
$(document)("input [class=domain]").each(function() {
//TO DO: Refresh jsonObj
alert(domain); /<<-- This line is not reached.
});
}
</script>
第二个问题是,是否可以缩短此代码。现在我在document.ready-event 更改和中有两个单独的功能 输入元素上的每个。
T.I.A。
答案 0 :(得分:1)
您在.
之前错过了.find
,可能还有.each
。代码如下所示:
$(document).find("input[class=domain]").each(function() {
//TO DO: Refresh jsonObj
alert(domain);
});
更新
关于你的第二个问题,如果.each
中的行与refreshData
函数中的行相同,我会缩短代码如下:
jsonObj = [];
$(document).ready(function(){
refreshData();//call once on DOM Load
$('.domain').change(refreshData); //attach it as named function to change event
});
function refreshData() {
//keep all this code here
$(".domain").each(function() {
var domain = $(this).attr("name");
var score = $(this).val();
item = {}
item["domain"] = domain;
item["score"] = score;
jsonObj.push(item);
});
}
答案 1 :(得分:1)
$('.domain').each(function(){
alert(domain);
})
使用此代替$(document)("input [class=domain]").each
答案 2 :(得分:1)
由于某些原因,这个表达式是错误的:
$(document)("input [class=domain]")
<强> A 即可。 input
和[class=domain]
之间必须没有空格。这是&#34;具有类domain
&#34;的输入之间的差异。 (input[class=domain]
)和&#34;输入其子节点之一具有类域&#34; (input [class=domain]
)。
<强>乙即可。要在jQuery元素内部进行查询,您需要使用find
方法,如下所示:$(document).find("input [class=domain]")
。但由于document
是根元素,因此您只需编写$("input [class=domain]")
。
P.S
在CSS选择器(如jQuery)中,有一种用于搜索类的特殊语法,因此您只需编写input.domain
。
这就是该行最后应该如何看待:
$("input.domain").each...
您可以阅读有关css选择器here的更多信息。
答案 3 :(得分:1)
我做了一些纠正,你可以缩短它:
<script>
jsonObj = []; // array declaration
$(document).ready(function(){
$("input.domain").change(function(){ // <----better to use a class selector
refreshData($("input.domain")); // <----pass the object in the function
}).change(); //<----trigger it on load to execute
});
function refreshData(el) { // get the passed object in the func arg
$(el).each(function() { // <----have a loop on it this way
var domain = $(this).attr("name"); // extract the name on current object in collection
var score = this.value; // get the value of the current object in iteration
var item = {}; // declare a new object
item["domain"] = domain; // set new prop and assign value here
item["score"] = score; // set new prop and assign value here
jsonObj.push(item); // now push the object in the array.
});
}
</script>
答案 4 :(得分:0)
奇怪的代码......
$(document)("input [class=domain]").each
试试这个:
$("input[class=domain]").each