0

私は次のようなHTMLを持っています

<div class='form-field-box even' id="one_field_box">
    <div class='form-display-as-box' id="one_display_as_box">
        one<span class='required'>*</span>  :
    </div>
    <select id='one'  name='one'   data-placeholder="Select one" class="chzn-select"  style="width:300px;" tabindex="4">
      <option value='0'></option>
      <option value='Corto' selected='selected' >Corto</option>
      <option value='Largo'  >Largo</option>
    </select>               
    <div class="form-error"></div>
    <div class='clear'></div>   
</div>

そして、私はスクリプトを持っています:

function validate(id, error) {
    var obj = $('#' + id);
    if(obj.val() == '0' || obj.val() == ''){
        obj.parent().parent().find('.form-error').html(error);
        return true;
    }
return false;
}

私はこの関数を呼び出します:

validate('one', "error in field one.");

正しいナビゲーションが得られません。validate()関数を修正するのを手伝ってもらえますか?

4

4 に答える 4

1

正しいターゲットエラーメッセージコンテナの取得を試みることができます。また、イベントハンドラーを使用してメソッドを起動する必要があります。validate()

select変更時に検証関数を起動する必要があると思います。

$('select.chzn-select').on('change', function() {
   validate( this.id, 'error in field '+ this.id +'.');
});


obj        // select#one
 .parent() // div.form-field-box
 .find('.form-error') // error viewer
 .html(error);

または

obj       // select#one
 .next()  // div.form-field-box
 .find('.form-error') // error viewer
 .html(error);
于 2013-03-19T21:13:59.213 に答える
1

validate()たとえば、何らかのイベントの後に電話をかけていることを確認してください。changeまたはsubmitなど...

フィドルを参照してください:http://jsfiddle.net/amyamy86/9CC2b/

また、===厳密な比較に使用します。

if (obj.val() === '0' || obj.val() === '') {

要素のグループの検証を行うには<select class="validateMe">、ボタンをクリックして次のように言います。

function validate(id, error) {
    var obj = $('#' + id);
    if (obj.val() === '0' || obj.val() === '') {
        obj.parent().parent().find('.form-error').append('<p>' + error + '</p>');
        return true;
    }
    return false;
}

$('#validate').click(function () {
    $('.form-error').html('');    // clear existing errors
    $('select.validateMe').each(function () {
        var select = $(this);
        var id = $(this).attr('id');    // get id of each select
        validate(id, 'error in field ' + id);
    });
});
于 2013-03-19T21:16:06.673 に答える
1

IDで何らかの規則を使用しているように見えるので、フォームIDを作成してそのスコープ内で検索します。

if(obj.val() === '0' || obj.val() === ''){

    $("#" + id + "_field_box .form-error").html(error)
    return true;
}

追加のボーナスは、選択の位置を変更しても、検証ロジックが壊れないことです。

更新 私も厳密な等式を使用することをお勧めします

于 2013-03-19T21:16:50.873 に答える
1

jqueryを使用しているので、parent()メソッドを使用します。これにより、将来、ドロップダウンに別のラッパーを追加する予定がある場合でも、これは機能します。

function validate(id, error) {
    var obj = $('#' + id);
    if(obj.val() == '0' || obj.val() == ''){
        $('.form-error',obj.parent('#one_field_box')).html(error);
       return true;
    }
return false;
}
于 2013-03-19T21:21:56.303 に答える