我正在尝试解决Jquery中的通用代码结构问题。
我有一个听众,当html列表框发生变化时会做一些事情,就像这样:
<script>
$("#sdate").change(function () {
$.ajax({
url: 'test.php',
data: {
ref: '<?php echo $_GET['ref']; ?>',
fase1: $(this).val()
},
type: 'get',
success: function (d) {
$('.selector').html(d);
}
});
});
</script>
有时候列表框sdate可能不同,我的意思是,有时 sdate 可能是这样的:
<select id="sdate">
<option>option1</option>
<option>option2</option>
</select>
其他时间可能是这样的:
<select id="sdate">
<option fase2="some_value">option1</option>
<option fase2="some_value">option2</option>
</select>
根据参数fase1的可用性,我将通过ajax发送的GET变量将发生变化,例如,如果<option>option1</option>
ajax调用将是:
$.ajax({
url: 'test.php',
data: {
ref: '<?php echo $_GET['ref']; ?>',
fase1: $(this).val()
},
type: 'get',
success: function (d) {
$('.selector').html(d);
}
});
但如果列表框与<option fase2="some_value">option1</option>
类似,则ajax调用必须如下:
$.ajax({
url: 'test.php',
data: {
ref: '<?php echo $_GET['ref']; ?>',
fase1: THE_VALUE_FASE2_ON_THE_OPTION_PARAMETER
},
fase2: $(this).val()
}, type: 'get',
success: function (d) {
$('.selector').html(d);
}
});
我在jquery非常新,所以这给我带来了一些问题,感谢您对如何编写脚本的任何方向!
答案 0 :(得分:0)
为什么在发送之前不评估fase2或fase1属性?
与$('#sdate').attr('fase1');
类似,这会在jquery上返回属性fase1的值。
<script>
$("#sdate").change(function () {
var fase2 = $(this).attr('fase2');
var value = $(this).val();
$.ajax({
url: 'test.php',
data: {
ref: '<?php echo $_GET['ref']; ?>',
fase1: fase2 == '' ? value : fase_2,
},
type: 'get',
success: function (d) {
$('.selector').html(d);
}
});
});
</script>
像这样的东西???
编辑:我认为现在好多了。答案 1 :(得分:0)
也许:如果你们在cond 2中都需要fase1和fase2:
var data = {
ref: '<?php echo $_GET['ref']; ?>',
};
if ( $(this).attr("fase2") ) {
data.fase1 = $(this).attr("fase2");
data.fase2 = $(this).val();
} else {
data.fase1 = $(this).val();
}
然后在对象的数据变量referer中我们刚刚创建的数据变量
$.ajax({
url: 'test.php',
data: data,
type: 'get',
success: function (d) {
$('.selector').html(d);
}
});
如果关于fase1的问题是属性或值:
$.ajax({
url: 'test.php',
data: {
ref: '<?php echo $_GET['ref']; ?>',
fase1: $(this).attr('fase2') || $(this).val()
},
type: 'get',
success: function (d) {
$('.selector').html(d);
}
});