【发布时间】:2013-03-20 01:14:20
【问题描述】:
我以为我理解了整个 prop 与 attr 的关系,但我遇到了一个让我质疑这种理解的案例。
我正在为生成表格的主干视图编写测试,我的测试基本上做了以下事情:
// assert that $table.find('input[value="foo"]').length == 2
$table.find('input[value="foo"]:first').val('bar');
// assert that $table.find('input[value="foo"]').length == 1
奇怪的是,第二个断言失败了。经过大量的头撞墙时间后,我终于尝试了:
// assert that $table.find('input[value="foo"]').length == 2
$table.find('input[value="foo"]:first').attr('value', 'bar');
// assert that $table.find('input[value="foo"]').length == 1
你瞧,我的测试通过了。
现在,我希望我可以发布所有相关代码的小提琴,但是太多了(表 View 单独是 685 行),但我正在寻找一般理解类型的答案,而不是特定的“修复代码中的 X”。而我想要理解的是,为什么会有这样的情况:
$table.find('input[value="foo"]:first').val('bar');
什么都不做,而:
$table.find('input[value="foo"]:first').attr('value', 'bar');
按预期工作?
附:我不应该说.val('bar') 什么也没做。如果我后来做了.val(),它会显示值已经改变......但是如果我检查了实际元素,或者使用了新的选择器,或者类似的东西,很明显val并没有真正改变任何东西.这只会让我更加困惑。
【问题讨论】:
标签: jquery backbone.js