2017-04-04 3 views
0

クリック処理をテーブル行に追加していますが、href属性のないテーブルに対してもスクリプトが実行される可能性があるので、ブレーク。私は両方のケースをキャッチする短絡回路を使用していた:値が定義されていないときにリフレッシュをトリガせずにウィンドウが短絡する

// clicking on an entire row changes the current url 
$("tbody tr").click(function() { 
    debugger; 
    window.location = $(this).attr("href") || void(0); 
}); 

問題は場合にhref属性が定義されていないということである(それゆえ:false)、void(0)window.locationページがリフレッシュする原因となる設定します。

3進演算子やif/then/else文を使用せずにこれを行う方法はありますか?

+0

ないHREFがない場合、なぜ値を設定し、それを参照する

<tr data-href="//example.com"> 

及び使用データより()? – epascarello

答えて

1

属性がない場合は選択しないでください。

$("tbody tr[href]").click(function() { 
    //if ($(this).attr("href").length) 
    window.location = $(this).attr("href"); 
}); 

または個人的に私は、データ属性はないのhrefを使用することになり

$("tbody tr").click(function() { 
    var href = $(this).attr("href"); 
    if (href) { 
    window.location = href; 
    } 
}); 
それを呼び出すことはありません。

var href = $(this).data("href") 
+0

hrefが存在するが空である場合: –

+0

単純な長さチェックを追加するよりも、ロケット科学ではありません。 ;) – epascarello

+0

hehe私は知っている知っている、最短の最も洗練された解決策を書くことを試みていた(短絡はオプションになるだろうと思ったが)ええ、属性セレクタは人生の節約者(そして何も起こらないイベントを誘発するから) –

0
$("tbody tr").click(function() { 
     var link = $(this).attr("href"); 

     if (link && link.length) { 
      window.location = link; 
     } 

    }); 
+0

コードに説明を与えることを検討する – arghtype

関連する問題