<body>
<button id="test" value="1">click</button>
</body>
<script>
function Button(){
this.click = false;
this.click = function(){
this.clicked = true;
if(this.clicked){
alert(this.value);
}
}
}
var button = new Button();
var elem = document.getElementById('test');
elem.addEventListener('click',button.click);
</script>
我希望可以用jquery的方式改寫
主要是不懂jquery如何綁定函式的背景空間
有點沒懂你是要取按鈕的值 用jquery的寫法?
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js">
</script>
<script>
$( "button" ).click(function() {
alert( "寫法1按鈕的值:"+ $(this).val());
});
$( "button" ).on( "click", function() {
alert( "寫法2按鈕的值:"+ $(this).val());
});
</script>
<body>
<button id="test" value="1">click</button>
<button id="test2" value="2">click2</button>
</body>
https://jsfiddle.net/fillano/4nfy3obh/
我猜測你是要做一個按鈕,按過一次以後,下一次再按就會alert,所以稍微調整一下。
function select(id){
var ID = $('#'+id);
ID.on('change',select);
function select(){
$url = "php/"+ID.attr('id')+".php";
$.ajax({
url : $url,
type : 'post',
data : {
city_code : ID.val()
},
datatype:'html'
}).done(function(data){
if(data){
$('#house_city').html(data);
}
})
}
}
select('house_state');
想請問這樣寫為甚麼不行呢?
你是要做select的change事件吧
還是要button去抓select的值?
你先在程式裡面加上console.log當作標示,例如:
function select(id){
console.log('[outer select] enter');
var ID = $('#'+id);
ID.on('change',select);
function select(){
console.log('[inner select] enter');
$url = "php/"+ID.attr('id')+".php";
$.ajax({
url : $url,
type : 'post',
data : {
city_code : ID.val()
},
datatype:'html'
}).done(function(data){
console.log('[inner select] step 1 done');
if(data){
console.log('[inner select] step 2 if');
$('#house_city').html(data);
}
})
}
}
select('house_state');
然後在開發工具的Console檢查看看程式跑的流程是否跟你預期的一樣。
如果需要紀錄是否已經點擊,可以利用 closure 的方式處理。
html
<button id="test1" value="JS">測試 JS</button>
<button id="test2" value="JQ">測試 JQ</button>
JavaScript
//產生函式的函式,
function createCallbck()
{
var clicked=false;
return function(evt) {
if(clicked) {
alert(this.value);
//JQ也可寫成 alert($(this).val());
}
clicked=true;
}
}
//原生 JS
var elem = document.getElementById('test1');
elem.addEventListener('click', createCallbck());
//JQ 寫法
$('#test2').click(createCallbck());