2014-09-03 72 views
-3

雖然我已經通過了這個thread關於上述題目的問題,但仍然無法解決我的問題。如何將匿名jQuery代碼轉換爲命名函數並調用它?

MY jQuery代碼在單獨的JS文件[test.js]: -

jQuery(document).ready(function($){ 

$("#category").change('select',function() 
{ 
    var category_id="category_id="+$("#category").val(); 

    $.getJSON("get_topic",category_id, function(topic) 
    { 
     $('#topic').empty(); 
     $('#topic').append("<option>--- Select Topic ---</option>"); 

     for(var t in topic) 
     { 
      var option = $('<option />'); 
      option.attr('value', topic[t].id).text(topic[t].name); 
      $('#topic').append(option); 
     } 

    }); 
}); 

});

現在我已經在我的PHP頁眉中添加了這個js文件。

<script src="http://localhost.dev/public/js/test.js"></script>

此代碼爲我工作的罰款。但是我已經將這個匿名代碼轉換爲命名函數addTopic。

我的新代碼修改[test.js]: - : -

function addTopics() 
{ 
    alert ('hi'); 
    $("#category").change('select',function() 
    { 
     var category_id="category_id="+$("#category").val(); 

     $.getJSON("get_topic",category_id, function(topic) 
     { 
      $('#topic').empty(); 
      $('#topic').append("<option>--- Select Quiz Topic ---</option>"); 

      for(var t in topic) 
      { 
       var option = $('<option />'); 
       option.attr('value', topic[t].id).text(topic[t].name); 
       $('#topic').append(option); 
      } 

     }); 
    }); 
} 

現在我打電話在我的PHP頁面這個方法: -

<select id="category" class="form-control" onchange="addTopics()" name="category"> 

現在,新的代碼不加工。請幫我解決這個問題。

在此先感謝。

編輯: -

問題範圍:

我有jQuery的匿名代碼。這工作正常。但我想將該匿名jQuery代碼轉換爲指定的jQuery函數。所以我可以調用那個jQuery函數,我需要調用它,而不是自動調用它。

+0

我不明白你要做什麼。 – Mathletics 2014-09-03 16:23:24

+5

將匿名函數更改爲命名函數是一回事,但您爲什麼試圖刪除完美無缺的JavaScript並將其替換爲內嵌JavaScript? – Nope 2014-09-03 16:25:45

+0

在我的項目中有主頁的概念。在主頁面標記中,我打電話給所有js,css文件。這些js文件將被自動添加到母版頁的所有子頁面中。我想要使用命名的jquery函數。 – 2014-09-03 16:46:01

回答

1

HTML:

不要在你的HTML應用的事件處理程序。它只是不好的做法。而不是僅僅使用你所需要的

<select id="category" class="form-control" name="category"> 

JS:

應用的事件處理程序在JavaScript這樣的:

$("#category").change('select', addTopics); 

和seperately定義函數爲命名的功能。事件處理程序現在會調用它。

function addTopics() 
{ 
    alert('hi'); 
    var category_id="category_id="+$("#category").val(); 

    $.getJSON("get_topic",category_id, function(topic) 
    { 
     $('#topic').empty(); 
     $('#topic').append("<option>--- Select Quiz Topic ---</option>"); 

     for(var t in topic) 
     { 
      var option = $('<option />'); 
      option.attr('value', topic[t].id).text(topic[t].name); 
      $('#topic').append(option); 
     } 

    }); 
} 
+0

感謝您的快速回復..但此代碼不適用於我..它不添加生成AJAX請求上的變化事件.. :( – 2014-09-03 16:47:37

+0

恐怕超出了發佈的問題。如果顯示警告框,那麼這個問題的需求已經被填充了,如果你想發表另一個問題,可能在[Code Review](http://codereview.stackexchange.com/)中,我相信你會得到一個解決方案。 – 2014-09-03 16:57:23

+0

兄弟我已添加警報框只是爲了測試目的,無論我的代碼是否工作......對不起,我感到困惑 – 2014-09-03 16:58:58

0

不,你不想調用select元素的onchange。你怎麼稱呼它在頁面加載:

<script src="… jQuery …"></script> 
<script src="http://localhost.dev/public/js/test.js"></script> 
<script type="text/javascript"> 
    jQuery(document).ready(addTopics); 
</script> 

如果你想放任何東西該元素的變化監聽器,它需要是唯一的function() { var category_id=…; $.getJSON("get_topic",…); }一部分。但你shouldn't use that anyway

+2

但是,這與OP原本有什麼不同呢?命名該函數的價值是什麼? (這與你的回答有關,而不是關於OP的目標令人困惑) – Mathletics 2014-09-03 16:24:29

+0

實際上,我認爲OP會考慮到根據select元素中選擇的類別在一組新的主題中加載更改 – 2014-09-03 16:24:59

+1

@Mathletics :這並不是很不一樣,因爲他說代碼最初工作正常。據我所知,他只想把它放在外部腳本中。 – Bergi 2014-09-03 16:28:14

0

謝謝大家的幫助... Atlast我的問題解決了。

function addTopics() 
{ 
    var category_id="category_id="+$("#category").val(); 

    $.getJSON("get_topic",category_id, function(topic) 
    { 
    $('#topic').empty(); 
    $('#topic').append("<option>--- Select Quiz Topic ---</option>"); 

    for(var t in topic) 
    { 
     var option = $('<option />'); 
     option.attr('value', topic[t].id).text(topic[t].name); 
     $('#topic').append(option); 
    } 

}); 
} 

請指導我,如果這種方法是錯誤的......等待某人的建議。

順便再次感謝所有.. :)

快樂編碼。