2011-09-19 71 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(而不是类)的示例代码 –

相关问题