我有一个简单的jQuery if / else if condition但只有“if”部分有效,“else if”没有,我无法弄明白为什么。代码表示三个列表框( ajax-populated ),当它们中的任何一个单击时,jQuery函数会收集所单击项的ID并将其分配给变量。第一个(即使我切换位置,我得到正确的ID号)是好的,从来没有第二个或第三个。当我使用三个“if's”而不是“if / else if”结构时它不起作用。
$(document).ready(function() {
$('#btn_edit_details').click(function() {
var request_id;
if ($('#lstbx_new_repeat_requests').val().length > 0) {
request_id = $('#lstbx_new_repeat_requests').val();
alert(request_id);
}
else if ($('#lstbx_approved_repeat_requests').val().length > 0) {
request_id = $('#lstbx_approved_repeat_requests').val();
alert(request_id);
}
else if ($('#lstbx_declined_repeat_requests').val().length > 0) {
request_id = $('#lstbx_declined_repeat_requests').val();
alert(request_id);
}
if ($('#btn_edit_details').val() == 'edit') {
// rest of the code, working fine when the request_id is passed from the first "if"
和HTML
<input type='button' id='btn_edit_details' value='edit' />
<select id='lstbx_new_repeat_requests' name='lstbx_new_repeat_requests'></select>
<select id='lstbx_approved_repeat_requests' name='lstbx_approved_repeat_requests'></select>
<select id='lstbx_declined_repeat_requests' name='lstbx_declined_repeat_requests'></select>
答案 0 :(得分:1)
尝试this:
$('#btn_edit_details').click(function() {
var request_id;
$('select').each(function (index, value) {
if ($(this).val().length > 0) {
request_id = $(this).val();
alert(request_id);
return;
}
});
});
答案 1 :(得分:0)
实施逻辑存在问题。
考虑以下情况:
最初,用户从第一个选择列表中选择1并按下编辑。
$('#lstbx_new_repeat_requests').val()
为1,您将看到值为1的提醒。
之后,用户从第二个选择列表中选择选项2.
$('#lstbx_new_repeat_requests').val()
仍为1,因此,即使用户从第二个选择列表中选择了一个选项,您也会看到一个值为1的提醒。如果由于$('#lstbx_new_repeat_requests').val()
无法达到,则为
您可以在下面找到解决上述问题的实现方法。
<input type='button' id='btn_edit_details' value='edit' />
<select class="select-list" id='lstbx_new_repeat_requests' name='lstbx_new_repeat_requests'>
<option value=''></option>
<option value='1'>1</option>
</select>
<select class="select-list" id='lstbx_approved_repeat_requests' name='lstbx_approved_repeat_requests'>
<option value=''></option>
<option value='2'>2</option>
</select>
<select class="select-list" id='lstbx_declined_repeat_requests' name='lstbx_declined_repeat_requests'>
<option value=''></option>
<option value='3'>3</option>
</select>
var request_id;
$(document).ready(function() {
$('#btn_edit_details').click(function() {
alert(request_id);
});
$('.select-list').change(function() {
if ($(this).val().length > 0) {
request_id = $(this).val();
}
});
});
答案 2 :(得分:0)
我最终得到了它对我有用的唯一方式,虽然它看起来可能不那么聪明,但是再一次 - 这是我能让它发挥作用的唯一方式......我不知道为什么它没有使用真正基本的if / else if方式。任何建议或意见将被热烈接受。非常感谢您为协助所做的努力。
三个列表框的类是lstbx_repeat_requests
。当用户点击三者中的任何一个时,我在全局变量中捕获其id。然后我使用switch语句,如下所示:
捕获id:
$(document).ready(function() {
$('.lstbx_repeat_requests').change(function() {
//assigns a global var
window.my_config =
{
lstbx_id : this.id
};
});
});
切换声明:
$(document).ready(function() {
$('#btn_edit_details').click(function() {
var request_id;
switch(window.my_config.lstbx_id){
case "lstbx_new_repeat_requests":{
request_id = $('#lstbx_new_repeat_requests').val();
alert(request_id + " new");
break;
}
case "lstbx_approved_repeat_requests":{
request_id = $('#lstbx_approved_repeat_requests').val();
alert(request_id + " approved");
break;
}
case "lstbx_declined_repeat_requests":{
request_id = $('#lstbx_declined_repeat_requests').val();
alert(request_id + " declined");
break;
}
}
//rest of the code