2012-01-05 75 views
0

我想让不同的事件调用相同的函数。我从这里阅读其他帖子,但我想在一个页面中使用此功能。调用jQuery函数

情况是这样的:

我有约。 80列表框(选择)在表单中,我通过插件jCombo(jQuery & jSON & php)提供它们。首先,我将每个选择列表框(.change())与隐藏字段相关联,因为我想在表上存储索引(更新方法由php创建)。问题是,当我重新打开修改相同的记录(同一PHP文件),jCombo改变所有<select lists>并重新初始化为0。所以,我的我的事件$("select#listbox").change({});变化,很明显,我的隐藏字段值为0

有这种情况,我觉得一个简单的解决方案(我从三天前开始使用jQuery & Ajax)从选择列表中取消关联函数,并释放到$(“#AddButton”)onmouseup({...});. 所以,我写了80隐藏字段:

if ($("select#listbox_n_").val() != 0) { 
    $("#hidden_n_").val($("select#listbox_n_").attr('value')); 
} 

,其中n = 1 ... 80。

但现在我必须重复这一更新按钮,以便:

  1. 有其他方法,以解决名称的功能?
  2. 什么是“存储”功能的最佳位置(例如过程或什么),因为我想执行它们,只有当它是调用。
+1

请格式化您的问题,以便代码可读。看看右边或这里的框:http://stackoverflow.com/markdown – 2012-01-05 21:27:34

+5

请写出你的话,使他们有道理。 – 2012-01-05 21:29:03

+2

很困惑。我并不担心代码格式化,而是试图理解最终目标。对问题的高级概述将极其有用。 – 2012-01-05 21:33:04

回答

0

我猜你想要做的是从多个事件调用一个函数?如果是这样,所有你需要做的就是写你的功能,并参考你的事件。至于放置该功能,只需将它放在document.ready($(function() {...});)之外即可。

只是为了说明,这是我读到这个问题时碰巧写的东西。这将检查textarea字段的长度,并将其返回。这只是简单而简单的HTML/jQuery。

HTML:

<label for="message">Message: </label> 
<textarea name="message" id="message" rows="5" cols="70"></textarea> 

的jQuery:

$(function() { 
     $("#message").keyup(checkLength); 
     $("#message").keydown(checkLength); 
     }); 

function checkLength() { 
    var maxlength = 255; 
    var charlength = $(this).val().length; 
    var returnstring = (charlength + " of " + maxlength + " characters used."); 
} 

正如你所看到的,功能checkLength()被调用两次,在KEYUP从文本区域的keydown事件两者。请注意,就像我上面所说的那样,它们放置在document.ready函数的外部。然后它返回一个字符串,该字符串包含添加了多少个字符,与最大数量相比较。最后但并非最不重要的一点是,请注意该函数被称为WITHOUT()。这意味着它只是对该函数的引用,只有在该特定事件被触发时才会被调用。

我希望这有助于!

+0

谢谢!还有一个问题。 '$(函数(){ $( “#消息”)KEYUP(checkLength); $( “#消息”)的keydown(checkLength); });' 应从的document.ready被调用,没有? 所以问题是为什么我应该通过'$(function(){...})调用;'方法直接调用'$(“#message”)。keyup(checkLength);' – 2012-01-13 04:29:25

+0

@drLeo document.ready仅仅是指出,当一个字符被放入'#消息'时,该函数将被执行。加载页面时,它实际上不会调用该函数。这是因为我引用了函数,注意我说'.keyup(checkLength)',而不是'.keyup(checkLength())'。 – 2012-01-16 10:44:07

+0

;-)谢谢! – 2012-01-17 15:38:03