0
$("<button>")
    .addClass("radio")
    .addClass(this._getValue(lbl) ? "checked" : "")
    .attr(this._getDisableProp(lbl) ? ("disabled", "disabled") : "")
    .prop(this._getDisableProp(lbl) ? ("disabled", true) : ("disabled", false));

在上面的代码中,我试图添加attr并且prop仅当我的函数返回 true 时。我做了同样的addClass事情并且它有效,但它不适用于attrand prop

请问有什么解决方法吗?

4

4 回答 4

3

您不能基于三元运算符选择多个函数参数。您只能选择一个。所以做类似的事情:

$("button")
         .addClass("radio")
         .addClass(this._getValue(lbl) ? "checked" : "")
         .attr("disabled" , this._getDisableProp(lbl) ? "disabled" : "")
         .prop("disabled", this._getDisableProp(lbl) ? true : false);

但是,我建议仅使用该属性,因为设置为“”的“禁用”属性仍将禁用该元素(无论如何都会被属性覆盖):

$("button")
         .addClass("radio")
         .addClass(this._getValue(lbl) ? "checked" : "")
         .prop("disabled", this._getDisableProp(lbl) ? true : false);
于 2013-04-02T04:36:15.263 回答
0

做这样的事情:

.prop("disabled", this._getDisableProp(lbl))

您不希望对整个事物使用三元运算符...只是值(根据条件会有所不同)

请注意,即使 disabled 属性为空值也会导致元素被禁用,这就是我们使用 prop 的原因。

于 2013-04-02T04:17:38.890 回答
0

你不能直接这样做,但你可以这样做:

var btn = document.createElement("button");
btn.className = "radio";
if( this._getValue(lbl)) btn.className += " checked";
if( this.getDisableProp(lbl)) btn.disabled = true;

有时,多个步骤中的纯 JavaScript 比尝试一次性链接所有内容更容易;)

于 2013-04-02T04:22:40.397 回答
0

以你的风格,

  $("<button>")
        .addClass("radio")
        .addClass(this._getValue(lbl) ? "checked" : "") 
        .prop('disabled',this._getDisableProp(lbl));

更灵活的方法,

$("<button>")
    .addClass("radio")
    .addClass(function () {
        if(this._getValue(lbl)) return 'disabled';
     }) 
    .prop('disabled',function () {
        return this._getDisableProp(lbl) ;
     });

另外,你为什么同时使用attrprop添加disabled属性。您应该只使用prop并且disabled不需要值。

于 2013-04-02T04:42:34.587 回答