2011-09-19 76 views
0

我是Jquery和Ajax的新手。我正在嘗試使用良好的表單,並將我的Ajax函數調用保存在單獨的文件中。我的文件目前包括一個功能描述如下:僅當元素存在時才使用Jquery函數(Ajax調用)

$("form#click").submit(function(){ 
    myArray =$("option.asmOptionDisabled"); 
    tids = [] 
    $.each(myArray, function(i, val) { 
     tids[i] = val.value; 
    }); 
    $("#uberloading").css("display","block"); 
    tids = tids.join(',%20'); 

    date_start = $(".date-start")[0].value; 
    hour_start = $(".hour-start")[0].value; 

    date_end = $(".date-end")[0].value; 
    hour_end = $(".hour-end")[0].value; 



    $.ajax({ 
     url: '/saffron_main/click_out_display?tids='+tids+'&date-start='+date_start+'&hour-start='+hour_start+'&date-end='+date_end+'&hour-end='+hour_end, 
     success: function (data) { 
      $('#graph').html(data); 
      $("#uberloading").css("display","none"); 
     } 
    }); 
}); 

然而,當我加載此文件到一個頁面,沒有與類點擊表單元素,我收到一條錯誤,你不能在空元素上調用.submit函數。如何確保函數僅在存在帶有類單擊的表單元素時才加載?

+0

您使用的是哪個版本的jQuery,以及您使用了哪些額外的插件?似乎沒有發生1.6.3 http://jsfiddle.net/3MY9k/ –

+0

你從哪裏得到這個錯誤?它應該只是無法找到元素,因此無法綁定'submit'函數。 – JaredPar

回答

2

首先,form#clickid="click"(而不是class,如問題文字所述)的形式。

但這裏真正的問題並不是沒有這樣的形式 - jQuery將沒有問題,你的處理程序將不會被連接,但僅此而已。

問題是表達式$("form#click")本身不產生jQuery對象。這有兩個可能的原因:

  • jQuery沒有正確包含在頁面上給你提供這個錯誤,在這種情況下,包括它將解決這個問題。
  • 此代碼在jQuery包含在您的頁面之前運行,在這種情況下,在包含jQuery的<script>標記後移動它將解決此問題。
1

我傾向於使用的檢測方法.length()如果一個元素存在

$(document).ready(function(event) { 
    if ($("form#click").length) { 
     // your submit event listener logic here - or call to a function 
     // containing your event listener logic (cleans up doc ready a bit) 
    } 
}); 

這種方式如果匹配元件在網頁上找到的事件偵聽器僅被加載。

+0

這只是@Jon上面的回覆以及直接回答Peter的問題「我如何確保函數只在存在帶有類單擊的表單元素時才加載?」使用包含Jon指出的ID(而不是類)的示例代碼 –

相關問題