0

フォームのエンゲージメントを追跡するために使用しているJavaScriptのスニペットがあります。$(this)を使用して、スクリプト内の2つの関数にオブジェクトを渡しますが、Chromeが「未定義のプロパティ'length'を読み取れません。なぜ$(this)を使用できないので、次の数行のコードは実行されません。 )もう参照しますか?

$('select').blur(function () {

                var input_category = get_input_category($(this));

                var form_identifier = get_form_identifier($(this));

                if($(this).attr('name').length) {
// This is where I get the error ^^
                    var object_identifier = $(this).attr('name');
                }
                else if($(this).attr('id').length) {
                    var object_identifier = $(this).attr('id');
                }
                else if($(this).attr('class').length) {
                    var object_identifier = $(this).attr('class');
                }
                else {
                    var object_identifier = null;
                }
});

編集:選択ボックスには名前の値が付加されていません。

                        <select type="select">
                          <option value="volvo">Volvo</option>
                          <option value="saab">Saab</option>
                          <option value="mercedes">Mercedes</option>
                          <option value="audi">Audi</option>
                        </select>

しかし、それは私のスクリプトが探しているものではありませんか?名前がない場合は先に進めてほしい。エラーが発生せずに属性を確認するにはどうすればよいですか?

4

2 に答える 2

2

ベガが見たように、問題はattr('name')価値にあります。

オブジェクトの長さをチェックして定義されていることを確認しないでください。長さを取得できるオブジェクトがない場合にエラーが発生するためです。

通常のjsパターンを使用して、定義され、空でない値を持っていることを確認するだけです。

if ($(this).attr('name'))

それ以外の

if ($(this).attr('name').length)

最初のテストでは、これもチェックされないことに注意してください""。したがって、オブジェクトが定義されていることと定義されていないことの両方をチェックする理由はまったくありません""

于 2012-08-29T16:27:33.900 に答える
1

あなたが言ったことから、あなたはいくつかの条件チェックを追加する必要があるように私には見えます..以下を試してください、

$('select').blur(function () {

    var $this = $(this);
    var input_category = get_input_category($this);
    var form_identifier = get_form_identifier($this);

    var object_identifier = null;
    if(this.name) {
        object_identifier = this.name
    } else if(this.id) {
        object_identifier = this.id
    } else if(this.className) {
        object_identifier = this.className
    } 
});
于 2012-08-29T16:29:48.600 に答える