1

アンカータグのjqueryがあり、最初にajaxを呼び出し、成功が返されたときにもう一度クリックを呼び出します。2回目の呼び出しではtrueを返しますが、アンカーリンクは機能しません。

以下は私のコードです

HTML:

 <a href="#" class="test-link" target="_blank">test</a>

jQuery:

$(document.ready(function(){
  $('.test-link').click(function(){
    if ($(this).hasClass('test')){
      $(this).removeClass('test');
      return true;
    } else {

      $.ajax({
      ...
      ...
      success : function(data) {
          $('.test-link').attr('href',data.url).addClass('test').click(); 
      }
      });
      return false;
    }
 });

これは私には機能しません。また、preventDefault()を使用してみました。しかし、役に立たない。

注:最初のクリックでajaxを呼び出し、成功するとアンカーとクラスのURLを設定してから、もう一度クリックを呼び出しますが
、クリックは他のページに移動しません。

4

3 に答える 3

1

アンカーのクリック イベントをトリガーしても、指定されたページに自動的にリダイレクトされません。

別のページに移動するには、明示的にリンクをクリックする必要があります..

使用できます

window.open('','','width=200,height=100') ; // instead`

このアプローチを試すことができます

if ($(this).hasClass('test')){
    $(this).removeClass('test');

    window.open('','','width=200,height=100')
}
于 2012-11-01T23:06:42.267 に答える
1

を使用できますが、仕事window.open()に取りかかる限り、次のclick()ことができます。

$('.test-link').click(function(){
    if ($(this).hasClass('test')){
        $(this).removeClass('test').off('click'); // unbind click handler
        this.click();                             // call native click()
    } else {
      $.ajax({
      ...
      ...
      success : function(data) {
          $('.test-link').attr('href',data.url).addClass('test').click(); 
      }
      });
      return false;
    }
 });

を使用すると、jQuery メソッドではなくthis.click()DOM 要素のメソッドが直接呼び出されます。これにより、リンクのデフォルトの動作が実際に機能することがわかりました (つまり、指定された URL に移動します)。一方、jQueryメソッドは割り当てたハンドラーを実行しますが、実際にはナビゲートしません。click()click()click()

ただし、無限ループに陥らないように、クリック ハンドラーのバインドを解除する必要もあります。つまり、それ以降、リンクは常に同じ URL を新しいタブで開き、それ以上の Ajax リクエストは行われません。それは受け入れられますか?

デモ: http://jsfiddle.net/Pdwt8/1/

于 2012-11-01T23:09:24.267 に答える
0

これにより、ポップアップではなく新しいタブでページが開きます

  window.open(url,'_blank');

そうあるべきだと思いますが、

if ($(this).hasClass('test')){
$(this).removeClass('test');

window.open($(this).text(),'_blank');
}
于 2012-11-01T23:22:30.043 に答える