te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - How do I add a function to an element via jQuery? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How do I add a function to an element via jQuery? - Stack Overflow

programmeradmin3浏览0评论

I want to do something like this:

$('.dynamicHtmlForm').validate = function() {
  return true;
}

$('.dynamicHtmlForm .saveButton').click(function() {
  if (!$(this).closest('.dynamicHtmlForm').validate()) {
    return false;
  }

  return true;
});

And then when I have a form of class dynamicHtmlForm, I want to be able to provide a custom validate() function:

$('#myDynamicHtmlForm').validate = function() {
  // do some validation

  if (there are errors) {
    return false;
  }

  return true;
}

But I get this when I do this:

$(this).closest(".dynamicHtmlForm").validate is not a function

Is what I've described even possible? If so, what am I doing wrong?

I want to do something like this:

$('.dynamicHtmlForm').validate = function() {
  return true;
}

$('.dynamicHtmlForm .saveButton').click(function() {
  if (!$(this).closest('.dynamicHtmlForm').validate()) {
    return false;
  }

  return true;
});

And then when I have a form of class dynamicHtmlForm, I want to be able to provide a custom validate() function:

$('#myDynamicHtmlForm').validate = function() {
  // do some validation

  if (there are errors) {
    return false;
  }

  return true;
}

But I get this when I do this:

$(this).closest(".dynamicHtmlForm").validate is not a function

Is what I've described even possible? If so, what am I doing wrong?

Share Improve this question asked Apr 14, 2010 at 19:44 Chad JohnsonChad Johnson 21.9k36 gold badges115 silver badges217 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 5

Yes, it is technically possible. You will need to reference the element itself, however, and not the jQuery collection. This should work:

$('.dynamicHtmlForm').each(function (ix,o) {
  o.validate = function() {
    return true;
  }
});

$('.dynamicHtmlForm .saveButton').click(function() {
  if ($(this).closest('.dynamicHtmlForm')[0].validate()) {
    return false;
  }

  return true;
}
jQuery.fn.validate = function(options) {

   var defaults = {
       validateOPtions1 : '',
       validateOPtions2 : ''
   };

   var settings = $.extend({}, defaults, options);
   return this.each(function() {      
       // you validation code goes here
   });
};

$(document).ready(function() {

   $('selector').click(function() {

       $('some selector').validate();

       // or if you used any options in your code that you
       // want the user to enter. then you go :    
       $('some selector').validate({
            validateOPtions1: 'value1',
            validateOPtions2: 'value2'
       });

   });

});

You're not adding the function to the element, you're adding it to the jQuery wrapper around the element. Every time you pass a selector to jQuery, it will create a new wrapper for the found elements:

$('#myEl'); // gives a jQuery wrapper object
$('#myEl'); // creates another jQuery wrapper object

If you save the wrapped element to a variable and use that later, it would be a different story because you're accessing the saved jQuery wrapper object.

var dynamicHtmlForm = $('.dynamicHtmlForm');
dynamicHtmlForm.validate = function() {
  return true;
}

$('.dynamicHtmlForm .saveButton').click(function() {
  if (dynamicHtmlForm.validate()) {
    return false;
  }

  return true;
}

You could also add the function directly to the element using

$('.dynamicHtmlForm')[0].validate = function () { return true; }

// and later...
if (!$(this).closest('.dynamicHtmlForm')[0].validate())

Or you could look at extending jQuery properly by writing a plugin.

发布评论

评论列表(0)

  1. 暂无评论