2015-10-09 96 views
-3

我有一個帶有next和prev按鈕的傳送帶。他們有一個類名nav-arrow。我的問題是沒有按鈕。他們是<a>。有href#。所以當我點擊它們時,滾動跳轉到頂部。 所以我做了這個腳本:在jQuery問題中添加onclick屬性

<script type="text/javascript"> 
    jQuery(window).load(function(){ 
     var js = "return false;"; 
     var newclick = new Function(js); 
     jQuery(".nav-arrow").each(function(){ 
      jQuery(this).attr('onclick', '').click(newclick); 
     }); 
    }); 
</script> 

它的工作原理。 但如果我改變了我的腳本是這樣的:

<script type="text/javascript"> 
    jQuery(window).load(function(){ 
     var js = "return false;"; 
     //var newclick = new Function(js); 
     jQuery(".nav-arrow").each(function(){ 
      jQuery(this).attr('onclick', js); 
     }); 
    }); 
</script> 

事實並非如此。爲什麼?我不明白。

+1

你不明白爲什麼附加一個函數到一個onclick處理程序工作,但只是添加文本(「返回false」)不?真? – Jamiec

+1

@Jamiec其實,他們都在工作。設置屬性'onclick =「返回false」'預計會起作用,它確實有效。 –

回答

2

添加onclick屬性不是一個好習慣。添加處理程序到你的元素在這種情況下要好得多:

jQuery(".nav-arrow").on("click", function() { 
    return false; 
}); 

你的第二個例子中也適用。見下文。確保頁面上存在元素。

jQuery(window).load(function() { 
 
    var js = "return false;"; 
 
    //var newclick = new Function(js); 
 
    jQuery(".nav-arrow").each(function() { 
 
    jQuery(this).attr('onclick', js); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="http://example.com" class="nav-arrow">test</a>

注意,如果在頁面加載,load不會再次發射。您可以使用ready代替:

jQuery(window).ready(function() { 
    var js = "return false;"; 
    //var newclick = new Function(js); 
    jQuery(".nav-arrow").each(function() { 
    jQuery(this).attr('onclick', js); 
    }); 
}); 
+0

好吧,我明白這一點。但這不是我的問題。我的問題是爲什麼我的第一種方法工作,而另一個不.Thx :) – Chester

+0

@Chester他們都工作。查看編輯。 –

+0

@Chester查看我的編輯。稍微改進一下。 –

0

在第二種情況下,你是一個字符串值,只需連接到onclick處理程序。因此它不起作用。它期望一個函數並找到一個字符串。所以它什麼都不做。但是,如果你這樣做你的第一個方法或下面的一個,然後它會工作:

<script type="text/javascript"> 
    jQuery(window).load(function(){ 
     var js = "return false;"; 

     jQuery(".nav-arrow").each(function(){ 
      jQuery(this).attr('onclick', function(){ 
       eval(js); //evaluating the string into javascript code 
      }); 
     }); 
    }); 
</script> 
0

當心,從jQuery的事件處理程序返回falseevent.preventDefault();&event.stopPropagation();簡寫。從內聯js腳本返回false只防止默認行爲,不停止傳播。

所以我想你的問題(如果有的話?!),如果你看到不同的行爲,是因爲在你的第二種情況下,單擊事件氣泡父母(S)。