Ser*_*tin 6 html javascript jquery x-editable
我试图了解X-editable如何存储值.
例如,我有以下代码:
HTML:
<a class="editable" data-type="select" data-value="1">value-1</a>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
$.fn.editable.defaults.mode = 'inline';
$('.editable').html('value-2');
$('.editable').data('value',2);
$('.editable').editable({
source: function () {
return [
{ value: 1, text: "value-1" },
{ value: 2, text: "value-2" },
{ value: 3, text: "value-3" }
];
}
});
Run Code Online (Sandbox Code Playgroud)
这里是jsfiddle
你可以看到它工作得很好.在第一步,我将dropdown的值声明为"value-1",然后在JavaScript中将其更改为"value-2".结果,您可以在页面上"value-2",并在点击下拉列表后选择"value-2",将选择相同的值.
在这一步,我将修改JavaScript,如下所示:
//$('.editable').html('value-2');
$('.editable').data('value',2);
Run Code Online (Sandbox Code Playgroud)
结果再次令人期待.您将在页面上看到"value-1",但在打开下拉列表时将选择"value-2".
现在让我们以相反的方式更改JavaScript代码
$('.editable').html('value-2');
//$('.editable').data('value',2);
Run Code Online (Sandbox Code Playgroud)
在这样的修改之后,页面上的值将等于"值-2",但是在开始编辑时下拉列表中的选定值将是"值-1".所以也是非常合理的行为.
题:
我没想到的是,通过单击可编辑控件的"ok"按钮保存更改不会更改data-value属性,它只会更改显示的文本.例如,如果我们将值更新为"value-3"并单击"确定",则data-value属性仍将等于1.那么插件在再次打开后如何在下拉列表中选择适当的值?
UPD:
从代码中更改可编辑值的最正确方法是使用
$('.editable').editable('setValue', 'value-1');
Run Code Online (Sandbox Code Playgroud)
HTML 的data-*属性和 jQuery 的data()方法不是一回事。jQuery 在方法页面的HTML5 data-* Attributes子部分中记录了它如何data-*通过其data()方法处理 HTML 属性:data()
从 jQuery 1.4.3 开始,HTML 5
data-属性将自动拉入 jQuery 的数据对象。属性在第一次访问数据属性时
data-被拉取,然后不再被访问或改变(然后所有数据值都存储在 jQuery 内部)。
这意味着任何 HTMLdata-*属性在第一次访问该属性时最初都会被 jQuery 拉取,但此后就不再使用它。
如果我们重现您的步骤,我们将清楚地看到,尽管将值更改为value-3,data-value标记中的属性将保持不变:
<a class="editable" data-type="select" data-value="1">value-3</a>
Run Code Online (Sandbox Code Playgroud)
然而,jQuery 的内部data()方法会存储值的变化。我们可以通过'value'从元素中提取属性来看到这一点data():
$('.editable').data('value');
> 3
Run Code Online (Sandbox Code Playgroud)
如果您想更改data-value属性以反映此更改,我们可以通过使用 jQuery 的方法修改属性来自己完成此操作attr():
$('.editable').attr('data-value', 3);
Run Code Online (Sandbox Code Playgroud)
我们的标记现在看起来像这样:
<a class="editable" data-type="select" data-value="3">value-3</a>
Run Code Online (Sandbox Code Playgroud)
但请注意,如果您尝试单独使用该方法设置值attr(),则此更改不会反映在data()该元素的 jQuery 对象中:
<a class="editable" data-type="select" data-value="1">value-1</a>
Run Code Online (Sandbox Code Playgroud)
<a class="editable" data-type="select" data-value="1">value-3</a>
Run Code Online (Sandbox Code Playgroud)
$('.editable').data('value');
> 3
Run Code Online (Sandbox Code Playgroud)
$('.editable').attr('data-value', 3);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1445 次 |
| 最近记录: |