此语法适用于FF
<input data-bind="checked: isRequest, attr: { name: 'id_' + id }" type="checkbox" />
但是在IE7中,name属性没有呈现?
修改 其他属性,如标题作品,奇怪,但我需要name属性,以便我可以发布数据:/
答案 0 :(得分:4)
我遇到了一个类似的问题,尝试使用attr来解决问题:{'class':某事,'style':somethingElse}并放弃尝试让attr绑定在IE7中工作。
编写自定义绑定以手动应用jquery的工作是什么:
ko.bindingHandlers.customCss = {
init: function (element, valueAccessor, allBindingsAccessor) {
var css = ko.utils.unwrapObservable(valueAccessor());
$(element).addClass(css);
},
update: function (element, valueAccessor, allBindingsAccessor) {
var css = ko.utils.unwrapObservable(valueAccessor());
$(element).addClass(css);
}
};
所以在你的情况下,我会尝试在ko.applyBindings()之前将以下内容添加到你的document.ready中:
ko.bindingHandlers.customName= {
init: function (element, valueAccessor, allBindingsAccessor) {
var name= ko.utils.unwrapObservable(valueAccessor());
$(element).attr('name', 'id_' + name);
},
update: function (element, valueAccessor, allBindingsAccessor) {
var name= ko.utils.unwrapObservable(valueAccessor());
$(element).attr('name', 'id_' + name);
}
};
然后将您的输入绑定为:
<input data-bind="checked: isRequest, customName: id }" type="checkbox" />
答案 1 :(得分:1)
我知道这已经过时但我找到了解决IE6 / 7问题的方法。通过查看最新淘汰源的'uniqueName'绑定来找到解决方案:
ko.bindingHandlers['uniqueName'] = {
'init': function (element, valueAccessor) {
if (valueAccessor()) {
element.name = "ko_unique_" + (++ko.bindingHandlers['uniqueName'].currentIndex);
// Workaround IE 6/7 issue
// - https://github.com/SteveSanderson/knockout/issues/197
// - http://www.matts411.com/post/setting_the_name_attribute_in_ie_dom/
if (ko.utils.isIe6 || ko.utils.isIe7)
element.mergeAttributes(document.createElement("<input name='" + element.name + "'/>"), false);
}
}
};
简单地利用相同的机制来合并属性,这与改变名称属性具有相同的效果,但是以IE6 \ 7友好的方式。