2017-03-26 14 views
0

これは、何らかの理由で、jQuery UI Selectmenu-buttonがfocus()イベントとblur()イベントの両方で混乱するため、トリガしません。これらのイベントをトリガする方法はありますか?selectmenu() - 代入で関数を使用する必要はありませんか?jQuery - ui-selectmenu-button blur() - イベント

理由私は、入力、テキストエリアなどのフォーカスやぼかしイベントに使用される全体的な機能を持っていることをお伺いします。これはselectmenuでも使用できることがうれしいですが、ぼかしとフォーカスを受け入れると、少し難しくなります。

$('input,textarea,select').on('blur focus',function(event) { 
    var $this = $(this), 
     thisID = $this.attr('id'), 
     thisType = $this.attr('type'), 
     thisContent = $this.val(), 
     thisForm = $this.parents('form').attr('id'), 
     isRequired = $this.attr('required'), 
     getMessage = '', 
     elementPosition = $this.position(), 
     elementWidth = $this.width(), 
     elementHeight = $this.height(), 
     checkmarkPosition = (elementPosition != undefined) ? elementPosition.left + (elementWidth-10) : '', 
     topPosition = (elementPosition != undefined) ? Math.floor(elementPosition.top) : ''; 

     if ($(this).hasClass('required')) { 
      thisContent = $this.text(); 
     } 

     if (event.type == 'blur') { 
      if (isRequired == 'required' && (thisContent == '' || thisContent == 'Can\'t be empty')) { 
       getMessage = 'requiredField'; 
      } else if (thisType == 'email') { 
       if (validateEmail(thisContent) == false) { 
        getMessage = 'notValidEmail'; 
       } else { 
        getMessage = 'checkMark'; 
       } 
      } else { 
       getMessage = 'checkMark'; 
      } 
     } 

    if (getMessage != '' && getMessage != undefined) { 
     $.post('/returnmessages.php', {getmessage:getMessage}, function(data) { 
      data = $.parseJSON(data), 
      message = data.returnmessage, 
      infoState = data.infostate; 

      if (infoState != '' && infoState != undefined && thisType != 'submit') { 
       if (infoState == 'success') { 
        $this.addClass(infoState).after('<span style="position: absolute; left: '+(checkmarkPosition)+'px; top: '+(topPosition+10)+'px;" class="fa fa-check"></span>'); 
       } else if (infoState == 'error' && (thisContent == '' || thisContent == undefined)) { 
        $this.addClass(infoState).prop('placeholder',message).next('span').remove(); 
       } 
      } 
     }) 
    } 
}) 

通常の入力ではなく、selectmenu要素に関する定期的なイベントのために正常に動作します:

現在、私は次のコードを持っています。これは要素自体に "ok"(チェックマーク)と異なるエラーメッセージなどを返す関数であるため、別々の要素にエラーメッセージを添付する必要はありません。

誰でもこの作品を作成する方法について考えていますか?

+0

便利願っています使用することができます。選択ボックス(カスタムボタン/矢印付き)のCSSをやり直して、新しいHTML/CSSに合わせてJavaScriptのビット全体をやり直してください。 – junkfoodjunkie

答えて

0

あなたが選択し、独自の機能をトリガしないことを意味している場合、あなたは

$("#selectionSomething").selectmenu({ 
    change: function(){ 
     $(this).trigger('blur') 
    } 
}); 

が、それは私は、これは `UI-selectmenu`を使用して動作するように得ることがあまりにも面倒だったことが判明

+0

これは便利ですが、私の問題は解決しません。これは、選択肢に実際の変更がある場合に機能します。つまり、誰かが選択肢を選択します。しかし、オプションが選択されていない(つまり、 "空"の場合)、それは起動せず、エラーが表示されない場合は機能しません。これは、成功を意味します。これは変更を引き起こすためですが、非選択は機能しません。 – junkfoodjunkie

関連する問題