2016-05-31 19 views
0

私は以下のようなhtmlコンテンツを持っています。div要素内のアンカータグのonclickイベントを無効にするにはどうすればよいですか?

<div> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
</div> 

問題:私は任意のリンクをクリックすると

、onClickの機能で、私は1つのAJAX呼び出しを行います。

私は、応答を受け取った後にajax応答を得るまで、タグのすべてのonClickイベントを無効にする(またはdivとそのすべての子要素を無効にする)だけです。すべてのタグonclickを再度有効にする必要がありますイベント。

同じことを達成する方法はありますか?

+0

、それは '' element.off(イベント)を有効にし、ためelement.on(「イベント」) 'と簡単です'無効 –

+0

のために、このための単純な解決策が考えられローディング指示を表示し、応答を取得するまでUIの対話をブロックします。 – Rohit416

+0

@ MarcosPrezGude私はこれを試しましたが、私にとってはうまくいきません... jsfiddleでサンプルの例を挙げてください。 –

答えて

0

ありがとうございます。

私は非常に簡単な解決策を見つけました。

ソリューション:

あなたが任意の要素にクリックイベントを無効にするには、CSSプロパティのポインタ・イベントを使用することができます。

https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events

// To disable:  
document.getElementById('id').style.pointerEvents = 'none'; 
// To re-enable: 
document.getElementById('id').style.pointerEvents = 'auto'; 
// Use '' if you want to allow CSS rules to set the value 

おかげで、

ディキシット

+0

さらに、 wait; ':) – Rohit416

+0

このメソッドは予期しない結果を生成します。オンクリックだけでなく、テキストやイベントに関連するものを選択することはできません。それを慎重に使用する –

0
<a href="#" onclick="someFunction();">Link 1</a> 

someFunction(){ 
    //some code here 
    $.get('test.aspx', function(data){ 
    //do something here 
    }) 
return false; 
} 

チェックこのDEMO

+0

デモを更新しましたか確認してください –

+0

デモを1つの実例で更新してください。 –

0

あなたはこれを行うには.ajaxStart() & .ajaxStop()jQueryのイベントを使用することができます。

$('a[href]').each(function() { 
         var $this = $(this); 
         if ($this.attr('href') && $this.attr('href') != '') { 
          $(this).attr('data-href', $(this).attr('href')); 
          $(this).removeAttr('href'); 
         } 
        }); 

をバック

$('a[data-href]').each(function() { 
       var $this = $(this); 
       if ($this.attr('data-href') && $this.attr('data-href') != '') { 
        $(this).attr('href', $(this).attr('data-href')); 
        $(this).removeAttr('data-href'); 
       } 
      }); 

それを有効にする。これは、あなたのHREFを削除し、カスタム属性を作成する一方:あなたは、以下のようにアンカータグを無効にするには、別のCSSを作成することができます。したがって、クリックイベントはアンカータグでは機能しません。

0

あなたがこの試すことができます:div要素にクラスを追加します)

1:

<div class="myDiv"> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
</div> 

2)AJAXを開始し、ショーのdiv AJAXの成功にdiv要素を非表示にする:

$(".myDiv").css('opacity','0.25');// blur div when ajax starts 
    $.ajax("test.php", { 
      success: function(data) { 
      $(".myDiv").css('opacity','1');// display div as ajax complete 
      }, 
      error: function() { 
      alert('An error occurred'); 
      } 
     }); 
    }); 
+0

私は隠すことができません、私はユーザーへのリンクを表示する必要があります、他の簡単な方法? –

+0

はいdivの不透明度を減らすことができます... ajaxを開始し、もう一度不透明度をajaxとして完全にリセットします –

+0

jsfiddleで実際の例を提供してください。 –

1

あなたはすべてのアンカータグを無効にすることができるjqXHRのbeforeSendコールバックと、すべてのアンカータグを有効にする jqXHR.always()コールバックを使用できます。

Jquery Ajax Documentation

+0

これは私のソリューションよりもはるかに優れています+1 – anu

0

通過が

function someFunction(){ 
    var status = $('#parentDiv').attr('data-active'); 
    if(!status){ 
     $("#parentDiv").attr('data-active',true); 
     //make ajax call 
     $.ajax("url", { 
      success: function(data) { 
       $("#parentDiv").attr('data-active',false);//make false when done 
      } 
     }); 
    } 
    } 

<div id="parentDiv" data-active="false"> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
    <a href="#" onclick="someFunction();">Link 1</a> 
</div> 

アクティブ状態のための注フラグを設定:これは、代替ソリューションです。 IMHO kedar kamtheのsolutionは、この問題を解決する最善の方法です。

0

beforeSendを使用して、すべての要素を無効にするコールバック関数を設定することができます。それらを成功に導く。これらの要素を無効/有効にする関数を追加することができます。 divにidを追加します。あなたは、JSファイル内のイベントをバインドする場合

$.ajax( 
    url: "your url", 
    beforeSend: function(xhr) { 
    disabledFields(true); 
    }, 
    success: function(){ 
    disabledFields(false); 
    }, 
    error: function(){ 
    disabledFields(false); 
    }); 

// 
function disabledField(isDisabled) 
{ 
    $("#myDiv").find("a").each(function(){ 
     if (isDisabled) 
     { 
      $(this).attr("disabled", "disabled"); 
     } 
     else 
     { 
      $(this).removeAttr("disabled"); 
     } 
    }); 
} 
関連する問題