通常情况下,a标签的href属性只能通过?name=xiaofang&age=10这种形式添加请求参数,这在某种场景下并不能满足我们的需求,我们需要a标签的参数更能向form表单一样自如。
代码
我们为其增加一个data属性,其data值指定为某一个元素id集合。
<a href="${ctx}/project/initPublishProduct?callbackType=forward&tabIndex=1" target="ajaxTodo" data="tabIndex" callback="ajaxDone" style="width: 100px;" class="btn btn-default">下一步</a>
<input type="hidden" id="tabIndex" value="${tabIndex}">
$.fn.extend({ ajaxTodo : function() { return this.each(function() { var $this = $(this); $this.click(function(event) { var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first")); YUNM.debug(url); if (!url.isFinishedTm()) { $.showErr($this.attr("warn")); return false; } var dataId = $this.attr("data"); if (dataId) { if (dataId.indexOf(",") != -1) { $.each(dataId.split(","), function(index, id){ if ($("#" + id) && $("#" + id).val()) { addMoreParamForUrl(url, id, $("#" + id).val()); } }); } else { if ($("#" + dataId) && $("#" + dataId).val()) { addMoreParamForUrl(url, dataId, $("#" + dataId).val()); } } } var title = $this.attr("atitle"); if (title) { $.showConfirm(title, function() { ajaxTodo(url, $this.attr("callback")); }); } else { ajaxTodo(url, $this.attr("callback")); } event.preventDefault(); }); }); }, });
我们先从a标签中获取data值,然后,根据data的值,获取隐藏域,然后再取隐藏域的值,封装到url中。
function addMoreParamForUrl(url, key, value) { if (url.indexOf("?") != -1) { url += "&" + key + "=" + value; } else { url += "?" + key + "=" + value; } return url; }