2016-07-06 5 views
1

私は面白いケースがあります:私はthis pluginをタグ入力フィールドに使用しています。タグフィールドにタグを追加するために「入力」をクリックすると、フォームが送信されます。jQuery preventDefault issue

$(document).ready(function() { 
    $(window).keydown(function(event){ 
     if(event.keyCode == 13) { 
      event.preventDefault(); 
      return false; 
     } 
    }); 
}); 

をそして、私は、タグの入力入力し、Enterキーを押したときに今、フィールドに新しいタグを作成しません。だから私は、提出からフォームを防ぐために以下のコードを置きます。デフォルトの入力動作は、タグプラグインで使用されます。

プラグインの変更を伴わない方法がありますか?

+1

イベントの伝播も停止するので、 'return false;'を削除してみてください。 'preventDefault()'だけでフォームを停止するには十分です –

+0

コメントありがとうございます。それはうまくいかなかった。フォーム提出を禁止し、タグプラグインも同様に入力します –

+0

McCrossan氏が提案した 'return false'を取り除き、' event.preventDefault() 'を' if(event.keyCode == 13){ .' – zer00ne

答えて

0

keydownイベントが発生している場所を確認するには、event.targetを使用します。

$(document).ready(function() { 
    $(window).keydown(function(event){ 
     if(event.keyCode == 13 && !$(e.target).is("input[name=fieldName]")) { 
      event.preventDefault(); 
      return false; 
     } 
    }); 
}); 
0

事は、それがformイベントリスナーを処理する前windowイベントリスナーのポイントに来ることはありませんここで、である、例えば:提出します。 イベントは常にdomの上に泡立ちます。だからformはいつもwindowの前に来る。したがって、windowイベントに関しては、formの既定値がすでに発生しているため、デフォルトを防止することはできません。 keydownリスナーをformに追加すると、それが機能するはずです。

編集:より正確であるため、さらに正確です。keydownリスナーを、あなたが防止したいフィールドにのみ追加します。デフォルト。

0

私は解決策を見つけた:

$(document).ready(function() { 

    $('#form-content').on('submit',function(event, can_submit){ 
     if(!can_submit){ 
      event.preventDefault(); 
     } 
    }) 
}); 

function formSubmit() { 
    $('#form-content').trigger('submit', [true]) 
} 

その後、私は、保存ボタンとしてリンクを使用します。答えを

<a class="btn btn-primary btn-lg btnSubmit" onclick="formSubmit()" >{% trans "Save" %}</a> 

感謝を!