我是jquery的新手。我知道这个问题很愚蠢,但我在这里错过了一些概念。 这是问题所在:
$("input.integers").each(function(index) {
console.log("----");
console.log($(this).attr('id') + " " + $(this).val());
console.log($(this).attr('id') + " " + $("#"+$(this).attr('id')).val());
// the next log is here just to show a direct selection. I'm concerned about the two logs above this one
console.log($("#myId").attr('id'), $("#myId").val());
that.setModelData($(this).attr('id'), $(this).val());
});
这是输出:
PhantomJS 1.6 (Linux) LOG: '----'
PhantomJS 1.6 (Linux): Executed 61 of 90
PhantomJS 1.6 (Linux) LOG: 'myId '
PhantomJS 1.6 (Linux): Executed 61 of 90
PhantomJS 1.6 (Linux) LOG: 'myId 123'
PhantomJS 1.6 (Linux): Executed 61 of 90
PhantomJS 1.6 (Linux) LOG: [ 'myId', '123' ]
输入标签。为什么$(this).val()
为空且$("#"+$(this).attr('id')).val()
包含正确的值?
更新:
业力测试:
it('the model must be updated', function(){
$("#myId").val("123");
$("#save-process").click();
server.respond();
expect(fdtView.model.get('myId')).toBe("123");
});
夹具:
<input id="myId" name="myId"
class="integers" type="text" />
答案 0 :(得分:0)
在循环中,此与$(“input.integers”)选择器匹配。所以,jquery在内存中有这个选择器。 $(“#myId”)是一个唯一的选择器,对于每个循环,jquery搜索此元素并对其进行分析。这两个元素是相同的巧合,因为你的HTML代码是:
<input class="integers" id="myId" />
但是,如果你输入的CSS类很多,那么这个会有所不同。
多输入的示例。
HTML code:
<input class="integers" value="toto"/>
<input class="integers" value="titi"/>
<input class="integers" value="tata"/>
<input class="integers" value="tutu"/>
JS代码:
$("input.integers").each(function(index) {
console.log("Value = "+$(this).val);
}
控制台日志:
Value = toto
Value = titi
Value = tata
Value = tutu
所以要回答你的问题,如果this.val()
与$("#"+$(this).attr('id')).val())
不同,那么加载它的选择器就不好了。
答案 1 :(得分:0)
好的,我不得不说这是业力问题而不是jquery。
我们正在使用Backbone.js,视图正在视图的定义中加载模板:
template : _.template($("#mytemplate").html()),
当加载测试时,如果它没有找到固定装置,将会出现异常,因此我们在启动时添加了一个名为fixtures.js的文件:
loadFixtures('viewtemplate.html','mytemplate.html');
(@ Blame)有人在茉莉花测试套件beforeEach
中添加了此代码:
beforeEach( function() {
loadFixtures('currentStepContainerFixture.html', 'mytemplate.html');
所以灯具加载两次。
当我在我的代码中使用时:
console.log($(this).attr('id') + " " + $(this).val());
console.log($(this).attr('id') + " " + $("#"+$(this).attr('id')).val());
基本上第一个日志是关于当前元素的,而第二个日志是关于具有该id的第一个输入。
这就是为什么我们有这种暴力行为。我不得不说,为了存在两个具有相同id的元素而引发某种异常,会有所帮助。
PhantomJS 1.6 (Linux): Executed 61 of 90
PhantomJS 1.6 (Linux) LOG: 'myId ' --> current $(this)
PhantomJS 1.6 (Linux): Executed 61 of 90
PhantomJS 1.6 (Linux) LOG: 'myId 123' --> first occurrence of "#myId"
我不配这四点,问题出在显示器和键盘之间。对不起:(