2017-02-02 4 views
0

JS/AJAXでフォームのリストをクリックしてフォームを送信しています。 JavaScriptは、アクティブな要素に基づいて送信タイプを決定します。これは複数のブラウザにまたがって動作しています。JavaScript ActiveElementはSafariのフォームではありません

問題:MAC上のSafari(バージョン10.0.2)は、ボタンの代わりにactiveElementをフォームと見なすため、getAttributeはnullを返します。クリックされた要素を取得する方法はありますか?ユーザーがクリックしたボタンを知る必要があります。

HTMLスタッフ:

<div id="#Records"> 
<form action="update.php" method="post"> 
    ... 
    <input name="submit" type="submit" data-action="send" value="send stuff" /> 
    <input name="submit" type="submit" data-action="update" value="update" /> 
    <input name="submit" type="submit" data-action="delete" value="delete" /> 
</form> 
</div> 

JavaScriptのもの

$("#Records form").submit(function (e) { 
     e.preventDefault(); 
     var url = this.action; 
     var data = $(this).serializeArray(); 
     var action = document.activeElement.getAttribute('data-action'); 
     data.push({ name: 'submit', value: action }); 

     $.ajax({ 
      type: "POST", 
      data: data, 
      cache: false, 
      url: url 
     }).done(function (data) { 
      $("#Records").html(data); 
     }).fail(function (result) { 
      ShowMessage("Error updating record!"); 
     }); 

     return false; 
    }); 
+2

を歓迎します。代わりにボタンボタンを使用してください。 –

+0

おそらくこれに関連しています:http://stackoverflow.com/questions/41841688/different-value-e-target-in-browers(質問の下のコメントをチェックしてください)、FFは 'activeElement'をまったく設定しません(それは体を保つ)。しかし、@TinyGiantは正しく、ここにサブミットボタンを使用しないでください。*スクリプトなし*フォールバックがないので、 'submit'を使うのは意味がありません。 – Kaiido

答えて

-1

あなたはe.currentTargetを使用して要素の代わりに、能動素子を得ることができませんか?

var action = $(e.currentTarget).attr('data-action'); 

ような何か

+0

$(e.currentTarget)はフォームであり、フォームにはその属性がないため動作しません。基本的に同じ問題。 –

0

OK(私はボタンのクリックは提出につながると仮定しています)は、小型巨人や他のコメントに基づいて、私はこれにコードを変更しました。それが最善の方法であるかどうかはわかりませんが、私がテストしたどこでもうまくいくようです。簡略化され

ノート、コメントが複数の送信ボタンを使用しないでください

HTML

<div id="#Records"> 
<form action="update.php" method="post"> 
    ... 
    <input type="button" onclick="return $(this).processRequest(this, 'send');" data-action="send" value="send stuff" /> 
    <input type="button" onclick="return $(this).processRequest(this, 'update');" data-action="update" value="update" /> 
    <input type="button" onclick="return $(this).processRequest(this, 'delete');" data-action="delete" value="delete" /> 
</form> 
</div> 

はJavaScript

jQuery.fn.processRequest = 
function(button, action) 
{ 
    var form = $(button).parents('form'); 
    var url = form[0].action; 
    var data = $(form).serializeArray() 
    data.push({ name: 'submit', value: action }); 

    $.ajax({ 
     type: "POST", 
     data: data, 
     cache: false, 
     url: url 
    }).done(function (data) { 
     $("#Records").html(data); 
    }).fail(function (result) { 
     ShowMessage("Error updating record!"); 
    }); 

    return false; 
} 
関連する問題