2017-01-04 96 views
1

我有一個使用jQuery和Bootstrap的頁面。一切工作正常,但由於某種原因,當我調用一個事件的功能控制檯說$(...).function is not a function。例如,如果我有這個:jQuery函數在事件上調用時不起作用

<script> 
    $("#myModal").modal('show'); 
</script> 

它工作正常,並且只要您加載頁面,模式就會顯示。但是,如果我嘗試調用它像這樣:

<script> 
    $("#myTrigger").click(function(e){ 
     e.preventDefault(); 
     $("#myModal").modal('show'); 
    }); 
</script> 

它不工作和控制檯,這個錯誤:

$(...).modal is not a function

任何想法?

編輯:

<script> 
    $(document).ready(function(){ 
     $("#myModal").modal('show'); 
    }); 
</script> 

工作正常,但同樣,

<script> 
    $(document).ready(function(){ 
     $("#myTrigger").click(function(e){ 
      e.preventDefault(); 
      alert("test); // Does alert 
      $("#myModal").modal('show'); // Doesn't work 
     }); 
    }); 
</script> 

...沒有。由於警報起作用,所以可以肯定地說觸發器確實存在並且點擊事件被正確調用。我正在使用其他一些框架,一個所見即所得的編輯器和uploadify。這可能是衝突錯誤嗎?起初我並不這麼認爲,因爲這兩起案件都是一個接一個地審理的,所以如果發生衝突就不會有效,對嗎?

UPDATE:

看起來就像是一個相當不錯的怪異的衝突問題。我嘗試了以下內容:

var bootstrapModal = $.fn.modal.noConflict(); 
$.fn.bModal = bootstrapModal; // established outside the click event 

$("#myTrigger").click(function(e){ 
    e.preventDefault(); 
    $("#myModal").bModal('show'); // doesn't work 
}); 

而且我仍然遇到同樣的問題。但是,在點擊事件內部建立$.fn.bModal,因爲如此:

var bootstrapModal = $.fn.modal.noConflict(); 

$("#myTrigger").click(function(e){ 
    e.preventDefault(); 
    $.fn.bModal = bootstrapModal; // established inside the click event 
    $("#myModal").bModal('show'); // works fine 
}); 

工作。仍然無法圍繞爲什麼會發生這種情況,以及爲什麼它在$(document).ready()上工作,但不在$('#trigger').click()上,也許Chrome處理衝突的具體方式也是其中的一部分。無論如何,這將做到。感謝所有幫助過我的人。

+2

這很奇怪。如果第一個代碼示例有效,那麼沒有理由第二個代碼不會。你能在一個片段或小提琴中展示一個問題的工作示例嗎?另外,我假設你在''之前執行這些腳本以確保DOM已經被加載,是否正確? –

+0

$(document).ready()也許? –

+0

看看這個[頁](http://stackoverflow.com/questions/33045469/function-is-not-a-function-jquery) 這是最常見的原因,因爲$被其他腳本使用(即Bootstrap)。 – Loaf

回答

0

測試了這個複製/粘貼演示從getbootstrap.com。一切正常。你必須有衝突的問題。 IMO jquery或bootstrap腳本正在與其他腳本衝突。

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link href="css/bootstrap.min.css" rel="stylesheet"> 
    </head> 
    <body> 
    <a href="#" class="btn btn-primary btn-lg" id="myTrigger"> 
     Launch demo modal 
    </a> 
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 
     <div class="modal-dialog" role="document"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
      <h4 class="modal-title" id="myModalLabel">Modal title</h4> 
      </div> 
      <div class="modal-body"> 
      ... 
      </div> 
      <div class="modal-footer"> 
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
      <button type="button" class="btn btn-primary">Save changes</button> 
      </div> 
     </div> 
     </div> 
    </div> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script src="js/bootstrap.min.js"></script> 
    <script> 
     $(document).ready(function(){ 
      $("#myTrigger").click(function(e){ 
       e.preventDefault(); 
       $("#myModal").modal('show'); // Does WORK 
      }); 
     }); 
    </script> 
    </body> 
</html> 
+0

是的,確實存在衝突問題。 –

1

你嘗試包裝的代碼在

$(document).ready(function(){ 
// your code 
}); 
+0

如果這是問題,那麼第一個代碼示例也不會有效。 –

+0

這不是取決於他在哪裏加載jQuery和Bootstrap相比,他在哪裏運行此代碼? –

+0

是的,但是如果第一個樣本正常工作,那麼設置必須正確 –

0

我覺得現在的問題是,當你進入到頁面的函數被調用,但該文件它尚未加載。 那麼試試這個:

$(document).ready(function(){       
$("#myTrigger").click(function(e){ 
    e.preventDefault(); 
    $("#myModal").modal('show'); 
}); 
} 

另一種方式來做到這一點是設置onClick="functionname()"與ID myTrigger你的HTML標記。然後聲明如下功能:

function functionname() 
{ 
//Code 
} 

而且你不需要$(document).ready();

你可以在這個鏈接看到了同樣的問題:jquery - is not a function error

+0

如果這是問題,那麼第一個代碼示例也不會有效。 –

+0

@RoryMcCrossan但它有所不同,因爲你正在使用函數 –

+0

如果你指的是使用'onclick'編輯這是一種可能性,但它在代碼標準中倒退了一步。 OP使用的方法是最好的,應該根據他們展示的樣本進行工作。這裏肯定還有另一個潛在的問題。 –

1
0

我認爲有一個腳本覆蓋您的$函數與純jQuery的。我有一個類似的問題,問題是一個包含jquery庫的第三方插件。每個自定義的jquery代碼工作正常,但插件調用導致一個JavaScript錯誤。看看你的第三方的東西,你的腳本標籤的順序。

0

你你有一個錯誤(缺少報價),這是防止模態展示試試這個,報警代碼:

<script> 
    $(document).ready(function(){ 
     $("#myTrigger").click(function(e){ 
      e.preventDefault(); 
      alert("test"); // Does alert 
      $("#myModal").modal('show'); // should work 
     }); 
    }); 
</script> 
+0

這是在此處寫入時的錯字。結果這是一個奇怪的衝突問題。 –

相關問題