2010-01-26 4 views
1

У меня работает, поэтому я просто спрашиваю, есть ли более элегантный способ сделать это. У меня есть:Передача параметров в jQuery

<form method="post" action="15Action.cfm"> 
<p><input id="A" name="A1"></p> 
<p><input id="B" name="B1"></p> 
<p><input id="C" name="C1"></p> 
<input name="Submit" type="submit" value="submit"> 
</form> 

Если изменения А или В, а затем соединить два поля вместе и поместить их в C. Что у меня есть:

function doit(A,B) { 
    return A+B; 
}; 
$(function() { 
    var A = $('#A'); 
    var B = $('#B'); 
    $('#A, #B').change(function() { 
    $('#C').val(doit(A.val(),B.val())); 
    }); 
}); 

Интересно, если я должен написать

$('#C').val(doit(A,B)) 

вместо этого, или приемлемо ли передавать A.val(), B.val()?

+2

Похоже, вы отредактировали исходный код, чтобы отразить изменения, предложенные Кайлом. Я думаю, что было бы более полезно для других, которые сталкиваются с этим вопросом, если вы оставили свой исходный код так, как он есть. В противном случае ответ Кайла не имеет большого смысла. – jessegavin

ответ

1

Интересно, если я должен написать

$('#C').val(doit(A,B)) 

вместо этого, или это приемлемо, чтобы передать A.val(), B.val()?

Передача A,B не будет работать. Ваше решение выглядит достаточно элегантно, вы даже кешируете объекты jQuery, чтобы получить A, B в используемых вами закрытиях.

вы могли бы сделать его немного более кратким, выполнив:

function doit(A,B) { 
    return A+B; 
}; 
$(function() { 
    var A = $('#A'); 
    var B = $('#B'); 
    $('#A, #B').change(function() { 
     $('#C').val(doit(A.val(),B.val())); 
    }); 
}); 
+0

Спасибо, Кайл! Я заметил, что после того, как я задал вопрос, и вы правы, указав это! Я отредактировал вопрос, чтобы обсуждение сосредоточилось на субъекте проходящих параметров. –

1

В любом случае это нормально ... Какое это зависит от того, какие параметры вы ожидаете всегда передавать до doit. Если вы заглядываете на объекты с помощью объектов jQuery (читаете элементы), тогда я могу использовать passin в селекторах для doit и делать все мои поисковые запросы там - или вы могли бы передать объекты jQuery сами, так как это не сильно изменило бы ситуацию.

function doit(a,b){ 
    return $(a).val()+$(b).val(); 
} 

// these are then functionally equiv. 
doit('#A','#B'); 
doit($('#A'), $('#B')); 
1

Если внутри doit() вам нужны значения А и В, оба метода одинаковы. Я оставил бы ваш код так, как есть.

1

Если все, что вы делаете, это объединение двух значений, я бы даже не потрудился с помощью функции doit() и просто склеил два значения вместе.

$(function() { 
    $('#A, #B').change(function() { 
     $('#C').val($('#A').val() + $('#B').val()); 
    }); 
}); 
+0

Элегантный. Возможно, я должен снова задать вопрос с более сложным сценарием, чтобы оправдать вызов функции и параметры передачи. –

Смежные вопросы