-1

この関数を使用して、属性の存在を確認します。

var hasAttribute = function(el, attr) {
    if ("hasAttribute" in el) {
        return el.attributes[attr] != null;
    }
    else if ("outerHTML" in el) {
        return (el.outerHTML
                   .replace(el.innerHTML, "")
                   .indexOf(" " + attr + "=") > -1);
    }
};

問題は、を使用して入力値を設定すると、使用する.val(x)と値を取得できます.val()が、hasAttribute関数はそれを検出できません。このjsfiddleは問題を示しています(最初のアラートは「入力に値があります」と表示され、2番目に表示されると予想していましたが、Chromeでは少なくとも最初のアラートは「入力に値が必要です」と表示されます)。

期待どおりに動作させるには.val(x)?(または、hasAttributeこれらの種類の値を検出する方法)

4

2 に答える 2

5

属性とプロパティは 2 つの異なるエンティティです。属性は、html 要素でインラインで定義されます。読み込み時に、ブラウザは各属性を読み取り、関連付けられたプロパティを作成します。

後でこの要素を更新すると、属性ではなくプロパティが更新されます。

このhttps://stackoverflow.com/a/5876747/297641の回答には、属性と小道具の詳細があります。

以下のようなものかもしれませんが、

if ($("input").prop("value")) {
    alert("input has a value");
} else {
    alert("input needs a value");
}

このための関数は今のところ必要ありません。undefinedプロップが存在しない場合、jQueryは返されるためです。

フェリックスが指摘したように、 であるinput.value値がない場合は、どちらが偽物であるかを実行するのが最善です""

于 2013-02-20T18:08:40.723 に答える
2

使用する.valことは、行うことと似ていel.value = ...ます。value要素に属性を設定することとは異なります。

于 2013-02-20T18:07:52.780 に答える