0

このコードをjQueryで機能させようとしています。また、各ルート要素の反復ごとに、同じ反復の代替ルート要素に何も含まれていないことを確認しようとしています。それ以外の場合は、.val( "")プロパティを空の文字列に設定します。可能であれば、検索、検索、またはスワップを使用して簡単な解決策を探します。

一致する各番号は、同じ行レベルと同じ反復回数にあります。

次のように、2つの異なるルート名を持つ2つの入力タイプの入力テキスト要素があります。

1番目のルートは「rootA」 です

 
    <input type = "text" name = "rootA1" />
    <input type = "text" name = "rootA2 />
    <input type = "text" name = "rootA3" />
   
2番目のルートは「rootB」 です
 
    <input type = "text" name = "rootB1" />
    <input type = "text" name = "rootB2 />
    <input type = "text" name = "rootB3" />
   

rootAのいずれかが呼び出された場合のぼかし時に関数fnRootA();を呼び出します。rootBのいずれかが呼び出された場合のぼかし時に関数fnRootB();を呼び出します。

繰り返しになりますが、1のような反復ごとに、代替ルートに何も含まれていないことを確認しようとしています。そうでない場合は、.val( "")プロパティがぼやけているルートの空の文字列に設定されます。

私の現在のコードは単一の要素に対して機能しますが、検索または検索を使用したかったのですが、それを構築する方法がわかりません。

$( "input [name ='rootA1']")。blur(function(e){
   fnRootA(1); //このコードはrootA1の値を削除するだけですval( "")
              //rootB1に何かが含まれている場合valueプロパティ
             //括弧内の(1)は反復回数です
});
4

5 に答える 5

2

これを試して

^セレクターは、name=rootで始まるすべての要素を選択します

$('input[name^=root]').on('blur', function(){

    if($(this).attr('name').indexOf('rootA') > -1){

       fnRootA();
    }
    else{
        fnRootB();
    }

})​;​
于 2012-09-27T15:22:46.363 に答える
1

アップデート

うーん。あなたの説明は少し広いですが、私はそれを突き刺します。

以下は、「rootA」のすべての入力を取得し、「ねえ、ぼかしですべての「rootB」要素をstring.emptyにします!」と伝えます。

$("input")
    .filter(function(e) {
        //  This should basically get a jQuery object made up of all input elements whose tag name contains "rootA"
        return $(this).attr("name").indexOf("rootA") != -1;
    })
    .blur(function(e) { //  of course the onblur function
        $("input")
            .filter(function(e) {
                //  This should basically get a jQuery object made up of all input elements whose tag name contains "rootB"
                return $(this).attr("name").indexOf("rootB") != -1;
            })
            .val("");   //  this would set their values to ""
    })

書くこともできます

$("input[name*='rootA']")
    .blur(function(e) {    //    of course the onblur function
        $("input[name*='rootB']")
            .val("");    //    this would set their values to ""
    })

ただし、現在選択されている入力と同じROOTにないすべての入力を変更する場合は、次を使用できます。

$("input")
    .blur(function(e) {    //    of course the onblur function
        // Grab the root name without Number for purpose of knowing what inputs NOT to reset
        var rootName = $(this).attr("name").substring(0, 5);
        $("input")
            .filter(function(e) {
                //    This should basically get a jQuery object made up of all input elements whose tag name contains "rootB"
                return $(this).attr("name").indexOf(rootName) == -1;
            })
            .val("");    //    this would set ALL inputs not of current root name values to ""
    })

リセットボタンを使用した完全な実例はこちら

于 2012-09-27T15:27:46.743 に答える
1

jQueryの属性containsselectorを使用できます。すべてのrootA/rootB入力を選択します。

このような:

$("input[name*='rootA']").blur(function(e) {
    //execute rootA function
});

$("input[name*='rootB']").blur(function(e) {
    //execute rootB function
});

(入力の数を取得するには、string.replaceを使用してルートプレフィックスを削除できます)

于 2012-09-27T15:24:23.757 に答える
1

jsFiddle デモ

一致する rootB# 入力を見つけようとしているように見えます。最も簡単な方法は、取得している rootA の現在の名前を取得して # 次を取得し、その番号で関数を呼び出し、対応する rootB# を削除することです価値。

$('input[name^="rootA"]').blur(function(e) {
    var _name = $(this).attr('name');

    _name = _name.substr(5);
    fnRootA(_name); 

});

function fnRootA(num) {
    console.log(num);

    $('input[name="rootB' + num + '"]').val('');
}
​
于 2012-09-27T15:25:50.557 に答える
1

class = 'rootA'最初の 3 つと他の 3 つのように入力にクラスを追加するとclass='rootB'、これを行うことができます。

編集: @pimvdb の提案に従って hasClass を使用する

$('input').on('blur', function(){
   if($(this).hasClass('rootA'))
    alert('rootA')
   else if($(this).hasClass('rootB'))
        alert('rootB')

}))

ライブフィドルを見る

于 2012-09-27T15:28:55.537 に答える