0

私はこれをしたいです。

<p class="validator">This is an error!</p>
<input type="text" validator="isGoodValue" value=""/>

<p class="validator">This is an error 2!</p>
<label>
<input type="text" validator="isGoodValue" value=""/></label>

<div><p class="validator">This is an error 3!</p></div>
<label>
<input type="text" validator="isGoodValue" value=""/></label>    

<script>
$('input').change( function() {
 if (!isGoogValue( $(this).val() )) {
     $(this).GET_ME_THE_VALIDATOR_ABOVE_ME().show();
 }
 else {
     $(this).GET_ME_THE_VALIDATOR_ABOVE_ME().hide();
 }
});
</script>

正確に取得するためのGET_ME_THE_VALIDATOR_ABOVE_MEのコードは何ですか

上記のバリデーターは、HTML 構造とは無関係ですか? またはjQueryのどの機能がこれを機能させますか...???

私は最も近い、親、前の..を使用しようとしていますが、うまくいきません。

4

2 に答える 2

2

これを試して

 if (!isGoogValue( $(this).val() )) {
     $(this).prevAll('.validator:first').show();
 }
 else {
     $(this).prevAll('.validator:first').hide();
 }  
于 2013-01-03T14:22:31.600 に答える
1

本当の解決策は、エラーメッセージが入力から完全に切り離されないように、一貫した構造を持つことです。その後、Antonが提案するのと同様の解決策を使用できます。

あるいは、HTML を正常なものに再構築することが絶対に不可能な場合は、すべての入力に ID を指定し、エラー メッセージに何らかの形で関連付けることができる ID を指定することができます。たとえば、入力 1 の ID は でinput1、対応するエラーはinput1errorです。次に、次のようなことができます。

$('input').change( function() {
     if (!isGoodValue( $(this).val() )) {
         var id = $(this).attr("id");
         $("#" + id + "error").show();
     }
     else {
         var id = $(this).attr("id");
         $("#" + id + "error").hide();
     }
 }); 

このフィドルを参照してください。

ID を介して関連付けることができる限り、エラーがどこに表示されるかは問題ではありません。

このフィドルに示されている別のソリューションでは、n 番目の入力が次のように n 番目のバリデーターに対応していると想定しています。

$('input').each(function(index, elem) {
    var idx = index;
    $(elem).change(function() {
        var val = $('.validator').eq(idx);
        if (!isGoodValue( $(this).val() )) {
            val.show();                
        }
        else {
            val.hide();
        }
    });            
});        
于 2013-01-03T14:59:56.293 に答える