2012-01-05 6 views
0

Я хочу, чтобы разные события вызывали ту же функцию. Я прочитал другую запись, отсюда, но я хочу использовать эту функцию только на одной странице.вызов функции jQuery

Ситуация что-то вроде этого:

У меня есть ок. 80 listbox (select) в форме, и я кормлю их через плагин 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')); 
} 

, где п = 1 ... 80.

Но теперь я должен повторить это для кнопки Update так:

  1. есть другой метод для решения функции по имени?
  2. Что такое лучшее место (например, процедура или что-то) для функции «сохранить», потому что я хочу их исполнить, только если это вызов.
+1

Пожалуйста, отформатируйте свой вопрос, чтобы код был читаемым. Посмотрите на поле справа или здесь: http://stackoverflow.com/markdown –

+5

Пожалуйста, напишите ваши слова, чтобы они имели смысл. –

+2

Так запутался. Меня меньше беспокоит форматирование кода, чем попытка понять конечную цель. Хороший высокоуровневый обзор того, что проблема, будет чрезвычайно полезной. –

ответ

0

Я угадываю, что вы пытаетесь сделать, это вызвать одну функцию из нескольких событий? Если это так, все, что вам нужно сделать, это написать свою функцию и указать ее в своих мероприятиях. А что касается размещения функции, просто поместите ее за пределы документа. ($(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 событий из текстового поля. Обратите внимание, что, как я уже сказал выше, они помещены в OUTSIDE функции document.ready. Затем он возвращает строку, содержащую количество символов, добавленных по сравнению с максимальной суммой. И последнее, но не менее важно отметить, что функция называется WITHOUT(). Это означает, что это просто ссылка на функцию, и она будет вызываться только тогда, когда это конкретное событие будет запущено.

Надеюсь, это поможет!

+0

спасибо! еще один вопрос. '$ (function() { $ (" # message "). Keyup (checkLength); $ (" # message "). Keydown (checkLength); });' следует вызывать из document.ready, нет? Итак, вопрос в том, почему я должен звонить через '$ (function() {...});' вместо этого вместо этого непосредственно вызывать '$ (" # message "). Keyup (checkLength);' –

+0

@drLeo Документ.ready просто указывает, что когда символ помещается в '# сообщение', функция будет выполнена. Когда страница загружается, она фактически не вызывает функцию. Это потому, что я ссылаюсь на функцию, замечаю, что я говорю '.keyup (checkLength)' и НЕ '.keyup (checkLength())'. –

+0

;-) Спасибо! –