6

私はこのようなページレイアウトを持っています

<input id="name" class="mandotary" type="text">
<label for="name">Name must be entered</label>

<input id="code" class="mandotary" type="text">
<label for="code">Code must be entered</label>

ここで、最初にページをロードするときにラベル要素を非表示にします。フォーカスが失われ、値がnullの場合は、ラベルを表示する必要があります。そうでない場合は、ラベルを非表示にする必要があります。私はこれを試しました

var inputElementArray = $("input.mandotary");
$.each(inputElementArray, function(index, element){

    var id = $(element).attr("id");
    var label = $("label").attr("for", id);
   // label.hide();

    $(element).focus(function(){
        var next = $(element).next();
        $(element).next().hide();
    }); //end of focus()

    $(element).blur(function(){

        // get value of text area
        var text = $(element).val();
        if (text == "") {
            var next = $(element).next();
            $(element).next().show();
        } //end of if

    }); //end of blur()

}); //end of $(document).ready(fn)

しかし、ライン

var label = $("label").attr("for", id);

両方のラベルをください。for属性値がid(nameまたはcode)であるラベルが必要です。varidのidとして名前またはコードを取得します。しかし、それは両方のリーブを見つけます。for属性値が入力要素IDと等しいラベルを見つけるにはどうすればよいですか?

ありがとう

4

3 に答える 3

20
var label = $('label[for="' + id + '"]');
// But it can be done simply with:
var label = $(element).next('label').attr("for", id);

メモと最高の教訓:

あなたのコードは正当な理由もなくjQueryを使いすぎています:

var id = $(element).attr("id");
// Can be simply:
var id = element.id;

eachまた、代わりに次のようにjQuery関数を使用できます。

var inputElementArray = $("input.mandotary");
$.each(inputElementArray, function(index, element){

直接要素で使用するには:

$("input.mandotary").each(function(index, element){
    //...
}):
于 2012-05-02T08:21:50.003 に答える
0

ラベルの直後に入力または選択を検索し、次のように見つける必要があります: $('#id of input or select').prev('label'); 例:

<label for="my_input">Text of label</label>
<input type="text" name="" id="my_input" value="" />
<script type="text/javascript">
    var labelText = $('#my_input').prev('label').html();
</script>
于 2016-04-06T16:01:02.743 に答える